Exit on pr merge with -d and merge queue

When running `gh pr merge -d` on a repo with a merge queue policy, exit before attempting to merge.
This commit is contained in:
Kynan Ware 2024-12-12 14:49:38 -07:00
parent 5e9283c70c
commit 439cfa08bb
2 changed files with 37 additions and 1 deletions

View file

@ -241,7 +241,15 @@ func (m *mergeContext) warnIfDiverged() {
// Check if the current state of the pull request allows for merging
func (m *mergeContext) canMerge() error {
if m.mergeQueueRequired {
// a pull request can always be added to the merge queue
// Requesting branch deletion on a PR with a merge queue
// policy is not allowed. Doing so can unexpectedly
// delete branches before merging, close the PR, and remove
// the PR from the merge queue.
if m.opts.DeleteBranch {
fmt.Fprintf(m.opts.IO.ErrOut, "%s Cannot use `-d` or `--delete-branch` when merge queue enabled\n", m.cs.FailureIcon())
return cmdutil.SilentError
}
// Otherwise, a pull request can always be added to the merge queue
return nil
}

View file

@ -659,6 +659,34 @@ func TestPrMerge_deleteBranch(t *testing.T) {
`), output.Stderr())
}
func TestPrMerge_deleteBranch_mergeQueue(t *testing.T) {
http := initFakeHTTP()
defer http.Verify(t)
shared.RunCommandFinder(
"",
&api.PullRequest{
ID: "PR_10",
Number: 10,
State: "OPEN",
Title: "Blueberries are a good fruit",
HeadRefName: "blueberries",
BaseRefName: "main",
MergeStateStatus: "CLEAN",
IsMergeQueueEnabled: true,
},
baseRepo("OWNER", "REPO", "main"),
)
output, err := runCommand(http, nil, "blueberries", true, `pr merge --merge --delete-branch`)
assert.ErrorIs(t, err, cmdutil.SilentError)
assert.Equal(t, "", output.String())
assert.Equal(t, heredoc.Docf(`
X Cannot use %[1]s-d%[1]s or %[1]s--delete-branch%[1]s when merge queue enabled
`, "`"), output.Stderr())
}
func TestPrMerge_deleteBranch_nonDefault(t *testing.T) {
http := initFakeHTTP()
defer http.Verify(t)