commands/mr/close/mr_close.go (59 lines of code) (raw):

package close import ( "fmt" "github.com/MakeNowJust/heredoc/v2" "gitlab.com/gitlab-org/cli/api" "gitlab.com/gitlab-org/cli/commands/cmdutils" "gitlab.com/gitlab-org/cli/commands/mr/mrutils" "github.com/spf13/cobra" gitlab "gitlab.com/gitlab-org/api/client-go" ) func NewCmdClose(f *cmdutils.Factory) *cobra.Command { mrCloseCmd := &cobra.Command{ Use: "close [<id> | <branch>]", Short: `Close a merge request.`, Long: ``, Example: heredoc.Doc(` $ glab mr close 1 # Close multiple merge requests at once $ glab mr close 1 2 3 4 # Use the checked-out branch $ glab mr close $ glab mr close branch $ glab mr close username:branch $ glab mr close branch -R another/repo `), RunE: func(cmd *cobra.Command, args []string) error { var err error c := f.IO.Color() apiClient, err := f.HttpClient() if err != nil { return err } mrs, repo, err := mrutils.MRsFromArgs(f, args, "opened") if err != nil { return err } l := &gitlab.UpdateMergeRequestOptions{} l.StateEvent = gitlab.Ptr("close") for _, mr := range mrs { if err = mrutils.MRCheckErrors(mr, mrutils.MRCheckErrOptions{ Closed: true, Merged: true, }); err != nil { return err } fmt.Fprintf(f.IO.StdOut, "- Closing merge request...\n") _, err := api.UpdateMR(apiClient, repo.FullName(), mr.IID, l) if err != nil { return err } // Update the value of the merge request to closed so that mrutils.DisplayMR // prints it as red mr.State = "closed" fmt.Fprintf(f.IO.StdOut, "%s Closed merge request !%d.\n", c.RedCheck(), mr.IID) fmt.Fprintln(f.IO.StdOut, mrutils.DisplayMR(c, &mr.BasicMergeRequest, f.IO.IsaTTY)) } return nil }, } return mrCloseCmd }