From 2c35eb04ff7a454c19e83014510db9c1087aa6f5 Mon Sep 17 00:00:00 2001 From: Devon Romanko <28825608+dpromanko@users.noreply.github.com> Date: Fri, 15 Jan 2021 16:54:46 -0500 Subject: [PATCH] address pr comments --- pkg/cmd/pr/merge/merge.go | 12 +++++++++--- pkg/cmd/pr/merge/merge_test.go | 30 ++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 3 deletions(-) diff --git a/pkg/cmd/pr/merge/merge.go b/pkg/cmd/pr/merge/merge.go index f282ae5c8..83dd883c6 100644 --- a/pkg/cmd/pr/merge/merge.go +++ b/pkg/cmd/pr/merge/merge.go @@ -125,10 +125,16 @@ func mergeRun(opts *MergeOptions) error { return err } + isPRAlreadyMerged := pr.State == "MERGED" + + if isPRAlreadyMerged && !opts.InteractiveMode && !opts.DeleteBranch { + err := fmt.Errorf("%s Pull request #%d (%s) was already merged", cs.Red("!"), pr.Number, pr.Title) + return err + } + deleteBranch := opts.DeleteBranch crossRepoPR := pr.HeadRepositoryOwner.Login != baseRepo.RepoOwner() isTerminal := opts.IO.IsStdoutTTY() - isPRAlreadyMerged := pr.State == "MERGED" if !isPRAlreadyMerged { mergeMethod := opts.MergeMethod @@ -166,9 +172,9 @@ func mergeRun(opts *MergeOptions) error { if isTerminal { fmt.Fprintf(opts.IO.ErrOut, "%s %s pull request #%d (%s)\n", cs.Magenta("✔"), action, pr.Number, pr.Title) } - } else { + } else if !opts.DeleteBranch { err := prompt.SurveyAskOne(&survey.Confirm{ - Message: fmt.Sprintf("Pull request #%d (%s) was already merged. Would you like to delete this local branch and switch to the default branch?", pr.Number, pr.Title), + Message: fmt.Sprintf("Pull request #%d (%s) was already merged. Delete the branch locally and switch to default branch?", pr.Number, pr.Title), Default: false, }, &deleteBranch) diff --git a/pkg/cmd/pr/merge/merge_test.go b/pkg/cmd/pr/merge/merge_test.go index ee57020f3..81fb63f51 100644 --- a/pkg/cmd/pr/merge/merge_test.go +++ b/pkg/cmd/pr/merge/merge_test.go @@ -518,6 +518,36 @@ func TestPrMerge_alreadyMerged(t *testing.T) { test.ExpectLines(t, output.Stderr(), "✔ Deleted branch blueberries and switched to branch master") } +func TestPrMerge_alreadyMerged_nonInteractive(t *testing.T) { + http := initFakeHTTP() + defer http.Verify(t) + http.Register( + httpmock.GraphQL(`query PullRequestByNumber\b`), + httpmock.StringResponse(` + { "data": { "repository": { + "pullRequest": { "number": 4, "title": "The title of the PR", "state": "MERGED"} + } } }`)) + + cs, cmdTeardown := test.InitCmdStubber() + defer cmdTeardown() + + cs.Stub("") // git config --get-regexp ^branch\.blueberries\.(remote|merge)$ + cs.Stub("") // git symbolic-ref --quiet --short HEAD + cs.Stub("") // git checkout master + cs.Stub("") // git branch -d + + output, err := runCommand(http, "blueberries", true, "pr merge 4 --merge") + if err == nil { + t.Fatalf("expected an error running command `pr merge`: %v", err) + } + + r := regexp.MustCompile(`Pull request #4 \(The title of the PR\) was already merged`) + + if !r.MatchString(err.Error()) { + t.Fatalf("output did not match regexp /%s/\n> output\n%q\n", r, output.Stderr()) + } +} + func TestPRMerge_interactive(t *testing.T) { http := initFakeHTTP() defer http.Verify(t)