Skip to content

Commit 8c85e14

Browse files
committed
Make it work without a PR number
1 parent 062c835 commit 8c85e14

File tree

3 files changed

+42
-5
lines changed

3 files changed

+42
-5
lines changed

api/queries_pr.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -446,6 +446,7 @@ func PullRequestForBranch(client *Client, repo ghrepo.Interface, baseBranch, hea
446446
type response struct {
447447
Repository struct {
448448
PullRequests struct {
449+
ID githubv4.ID
449450
Nodes []PullRequest
450451
}
451452
}
@@ -456,6 +457,7 @@ func PullRequestForBranch(client *Client, repo ghrepo.Interface, baseBranch, hea
456457
repository(owner: $owner, name: $repo) {
457458
pullRequests(headRefName: $headRefName, states: OPEN, first: 30) {
458459
nodes {
460+
id
459461
number
460462
title
461463
state

command/pr.go

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -85,9 +85,9 @@ var prReopenCmd = &cobra.Command{
8585
}
8686

8787
var prMergeCmd = &cobra.Command{
88-
Use: "merge <number | url> [--rebase | --merge | --squash]",
88+
Use: "merge [number | url] [--rebase | --merge | --squash]",
8989
Short: "Merge a pull request",
90-
Args: cobra.ExactArgs(1),
90+
Args: cobra.MaximumNArgs(1),
9191
RunE: prMerge,
9292
}
9393

@@ -110,6 +110,7 @@ func prStatus(cmd *cobra.Command, args []string) error {
110110

111111
repoOverride, _ := cmd.Flags().GetString("repo")
112112
currentPRNumber, currentPRHeadRef, err := prSelectorForCurrentBranch(ctx, baseRepo)
113+
113114
if err != nil && repoOverride == "" && err.Error() != "git: not on any branch" {
114115
return fmt.Errorf("could not query for pull request for current branch: %w", err)
115116
}
@@ -443,9 +444,23 @@ func prMerge(cmd *cobra.Command, args []string) error {
443444
return err
444445
}
445446

446-
pr, err := prFromArg(apiClient, baseRepo, args[0])
447-
if err != nil {
448-
return err
447+
var pr *api.PullRequest
448+
if len(args) > 0 {
449+
pr, err = prFromArg(apiClient, baseRepo, args[0])
450+
if err != nil {
451+
return err
452+
}
453+
} else {
454+
_, branchWithOwner, err := prSelectorForCurrentBranch(ctx, baseRepo)
455+
if err != nil {
456+
return err
457+
}
458+
459+
pr, err = api.PullRequestForBranch(apiClient, baseRepo, "", branchWithOwner)
460+
fmt.Printf("🌭 %+v\n", pr)
461+
if err != nil {
462+
return err
463+
}
449464
}
450465

451466
if pr.State == "MERGED" {

command/pr_test.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -976,6 +976,26 @@ func TestPrMerge(t *testing.T) {
976976
}
977977
}
978978

979+
func TestPrMerge_noPrNumberGiven(t *testing.T) {
980+
initWithStubs(
981+
stubResponse{200, bytes.NewBufferString(`{ "data": { "repository": {
982+
"pullRequest": { "number": 100, "closed": false, "state": "OPEN"}
983+
} } }`)},
984+
stubResponse{200, bytes.NewBufferString(`{"id": "THE-ID"}`)},
985+
)
986+
987+
output, err := RunCommand("pr merge")
988+
if err != nil {
989+
t.Fatalf("error running command `pr merge`: %v", err)
990+
}
991+
992+
r := regexp.MustCompile(`Merged pull request #100`)
993+
994+
if !r.MatchString(output.Stderr()) {
995+
t.Fatalf("output did not match regexp /%s/\n> output\n%q\n", r, output.Stderr())
996+
}
997+
}
998+
979999
func TestPrMerge_rebase(t *testing.T) {
9801000
initWithStubs(
9811001
stubResponse{200, bytes.NewBufferString(`{ "data": { "repository": {

0 commit comments

Comments
 (0)