From 6666adbdceccc5bd45e886734b7e3a074e999b17 Mon Sep 17 00:00:00 2001 From: Corey Johnson Date: Tue, 19 May 2020 11:29:00 -0700 Subject: [PATCH] Deal with merge conflicts --- api/queries_pr.go | 4 ++++ command/pr.go | 18 ++++++++++++++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/api/queries_pr.go b/api/queries_pr.go index c1afc6bc9..abfb9485e 100644 --- a/api/queries_pr.go +++ b/api/queries_pr.go @@ -45,6 +45,7 @@ type PullRequest struct { BaseRefName string HeadRefName string Body string + Mergeable string Author struct { Login string @@ -228,6 +229,7 @@ func PullRequests(client *Client, repo ghrepo.Interface, currentPRNumber int, cu state url headRefName + mergeable headRepositoryOwner { login } @@ -382,6 +384,7 @@ func PullRequestByNumber(client *Client, repo ghrepo.Interface, number int) (*Pu state closed body + mergeable author { login } @@ -490,6 +493,7 @@ func PullRequestForBranch(client *Client, repo ghrepo.Interface, baseBranch, hea title state body + mergeable author { login } diff --git a/command/pr.go b/command/pr.go index 148cbb074..fadcda594 100644 --- a/command/pr.go +++ b/command/pr.go @@ -449,7 +449,15 @@ func prMerge(cmd *cobra.Command, args []string) error { var pr *api.PullRequest if len(args) > 0 { - pr, err = prFromArg(apiClient, baseRepo, args[0]) + var prNumber string + n, _ := prFromURL(args[0]) + if n != "" { + prNumber = n + } else { + prNumber = args[0] + } + + pr, err = prFromArg(apiClient, baseRepo, prNumber) if err != nil { return err } @@ -469,7 +477,13 @@ func prMerge(cmd *cobra.Command, args []string) error { } } - if pr.State == "MERGED" { + if pr.Mergeable == "CONFLICTING" { + err := fmt.Errorf("%s Pull request #%d has conflicts and isn't mergeable ", utils.Red("!"), pr.Number) + return err + } else if pr.Mergeable == "UNKNOWN" { + err := fmt.Errorf("%s Pull request #%d can't be merged right now", utils.Red("!"), pr.Number) + return err + } else if pr.State == "MERGED" { err := fmt.Errorf("%s Pull request #%d was already merged", utils.Red("!"), pr.Number) return err }