// Copyright 2026 The Gitea Authors. All rights reserved. // SPDX-License-Identifier: MIT package stack import ( stdctx "context" "fmt" "gitea.dev/tea/cmd/flags" "gitea.dev/tea/modules/context" "gitea.dev/tea/modules/task" "gitea.dev/tea/modules/utils" "github.com/urfave/cli/v3" ) // CmdStackRestack represents a sub command to queue a stack restack var CmdStackRestack = cli.Command{ Name: "restack", Usage: "Queue a pull request stack restack", Description: "Retarget every open pull request above a merged one in the stack onto its parent's new base", ArgsUsage: "", Action: RunStackRestack, Flags: flags.AllDefaultFlags, } // RunStackRestack queues a restack of a pull request stack func RunStackRestack(requestCtx stdctx.Context, cmd *cli.Command) error { if cmd.Args().Len() != 1 { return fmt.Errorf("stack id is required") } id, err := utils.ArgToIndex(cmd.Args().First()) if err != nil { return err } ctx, err := context.InitCommand(cmd) if err != nil { return err } if err := ctx.Ensure(context.CtxRequirement{RemoteRepo: true}); err != nil { return err } if err := task.RestackPullStack(requestCtx, ctx.Login, ctx.Owner, ctx.Repo, id); err != nil { return err } fmt.Fprintf(ctx.Writer, "restack for stack #%d queued\n", id) return nil }