From 6e5a90821c0309da9ad6d01b20229fbc589c40ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mislav=20Marohni=C4=87?= Date: Mon, 18 Jan 2021 19:49:20 +0100 Subject: [PATCH] pr merge: handle case when a cross-repo PR was already merged In this case, do not ever offer to delete the branch. --- pkg/cmd/pr/merge/merge.go | 14 ++++++++------ pkg/cmd/pr/merge/merge_test.go | 2 +- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/pkg/cmd/pr/merge/merge.go b/pkg/cmd/pr/merge/merge.go index 4cac24242..19292c7e2 100644 --- a/pkg/cmd/pr/merge/merge.go +++ b/pkg/cmd/pr/merge/merge.go @@ -124,8 +124,8 @@ func mergeRun(opts *MergeOptions) error { } if pr.Mergeable == "CONFLICTING" { - err := fmt.Errorf("%s Pull request #%d (%s) has conflicts and isn't mergeable ", cs.Red("!"), pr.Number, pr.Title) - return err + fmt.Fprintf(opts.IO.ErrOut, "%s Pull request #%d (%s) has conflicts and isn't mergeable\n", cs.Red("!"), pr.Number, pr.Title) + return cmdutil.SilentError } deleteBranch := opts.DeleteBranch @@ -162,7 +162,7 @@ func mergeRun(opts *MergeOptions) error { } fmt.Fprintf(opts.IO.ErrOut, "%s %s pull request #%d (%s)\n", cs.Magenta("✔"), action, pr.Number, pr.Title) } - } else if !opts.IsDeleteBranchIndicated && opts.InteractiveMode { + } else if !opts.IsDeleteBranchIndicated && opts.InteractiveMode && !crossRepoPR { err := prompt.SurveyAskOne(&survey.Confirm{ Message: fmt.Sprintf("Pull request #%d was already merged. Delete the branch locally?", pr.Number), Default: false, @@ -170,15 +170,17 @@ func mergeRun(opts *MergeOptions) error { if err != nil { return fmt.Errorf("could not prompt: %w", err) } + } else if crossRepoPR { + fmt.Fprintf(opts.IO.ErrOut, "%s Pull request #%d was already merged\n", cs.WarningIcon(), pr.Number) } - if !deleteBranch { + if !deleteBranch || crossRepoPR { return nil } branchSwitchString := "" - if opts.CanDeleteLocalBranch && !crossRepoPR { + if opts.CanDeleteLocalBranch { currentBranch, err := opts.Branch() if err != nil { return err @@ -210,7 +212,7 @@ func mergeRun(opts *MergeOptions) error { } } - if !isPRAlreadyMerged && !crossRepoPR { + if !isPRAlreadyMerged { err = api.BranchDeleteRemote(apiClient, baseRepo, pr.HeadRefName) var httpErr api.HTTPError // The ref might have already been deleted by GitHub diff --git a/pkg/cmd/pr/merge/merge_test.go b/pkg/cmd/pr/merge/merge_test.go index 963fe13fe..6545afd9c 100644 --- a/pkg/cmd/pr/merge/merge_test.go +++ b/pkg/cmd/pr/merge/merge_test.go @@ -551,7 +551,7 @@ func TestPrMerge_alreadyMerged_nonInteractive(t *testing.T) { } assert.Equal(t, "", output.String()) - assert.Equal(t, "", output.Stderr()) + assert.Equal(t, "! Pull request #4 was already merged\n", output.Stderr()) } func TestPRMerge_interactive(t *testing.T) {