diff --git a/pkg/cmd/pr/view/fixtures/prViewPreviewWithAutoMergeEnabled.json b/pkg/cmd/pr/view/fixtures/prViewPreviewWithAutoMergeEnabled.json new file mode 100644 index 000000000..000dc440e --- /dev/null +++ b/pkg/cmd/pr/view/fixtures/prViewPreviewWithAutoMergeEnabled.json @@ -0,0 +1,55 @@ +{ + "data": { + "repository": { + "pullRequest": { + "number": 12, + "title": "Blueberries are from a fork", + "state": "OPEN", + "body": "**blueberries taste good**", + "url": "https://github.com/OWNER/REPO/pull/12", + "author": { + "login": "nobody" + }, + "autoMergeRequest": { + "authorEmail": null, + "commitBody": null, + "commitHeadline": null, + "mergeMethod": "SQUASH", + "enabledAt": "2020-08-27T19:00:12Z", + "enabledBy": { + "login": "hubot" + } + }, + "additions": 100, + "deletions": 10, + "reviewRequests": { + "nodes": [], + "totalcount": 0 + }, + "assignees": { + "nodes": [], + "totalcount": 0 + }, + "labels": { + "nodes": [], + "totalcount": 0 + }, + "projectcards": { + "nodes": [], + "totalcount": 0 + }, + "milestone": {}, + "commits": { + "totalCount": 12 + }, + "baseRefName": "master", + "headRefName": "blueberries", + "headRepositoryOwner": { + "login": "hubot" + }, + "isCrossRepository": true, + "isDraft": false + } + } + } +} diff --git a/pkg/cmd/pr/view/view.go b/pkg/cmd/pr/view/view.go index 10300a23c..71bda0649 100644 --- a/pkg/cmd/pr/view/view.go +++ b/pkg/cmd/pr/view/view.go @@ -77,7 +77,7 @@ func NewCmdView(f *cmdutil.Factory, runF func(*ViewOptions) error) *cobra.Comman } var defaultFields = []string{ - "url", "number", "title", "state", "body", "author", + "url", "number", "title", "state", "body", "author", "autoMergeRequest", "isDraft", "maintainerCanModify", "mergeable", "additions", "deletions", "commitsCount", "baseRefName", "headRefName", "headRepositoryOwner", "headRepository", "isCrossRepository", "reviewRequests", "reviews", "assignees", "labels", "projectCards", "milestone", @@ -157,6 +157,15 @@ func printRawPrPreview(io *iostreams.IOStreams, pr *api.PullRequest) error { fmt.Fprintf(out, "url:\t%s\n", pr.URL) fmt.Fprintf(out, "additions:\t%s\n", cs.Green(strconv.Itoa(pr.Additions))) fmt.Fprintf(out, "deletions:\t%s\n", cs.Red(strconv.Itoa(pr.Deletions))) + var autoMerge string + if pr.AutoMergeRequest == nil { + autoMerge = "disabled" + } else { + autoMerge = fmt.Sprintf("enabled\t%s\t%s", + pr.AutoMergeRequest.EnabledBy.Login, + strings.ToLower(pr.AutoMergeRequest.MergeMethod)) + } + fmt.Fprintf(out, "auto-merge:\t%s\n", autoMerge) fmt.Fprintln(out, "--") fmt.Fprintln(out, pr.Body) @@ -223,6 +232,29 @@ func printHumanPrPreview(opts *ViewOptions, pr *api.PullRequest) error { fmt.Fprintln(out, pr.Milestone.Title) } + // Auto-Merge status + autoMerge := pr.AutoMergeRequest + if autoMerge != nil { + var mergeMethod string + switch autoMerge.MergeMethod { + case "MERGE": + mergeMethod = "a merge commit" + case "REBASE": + mergeMethod = "rebase and merge" + case "SQUASH": + mergeMethod = "squash and merge" + default: + mergeMethod = fmt.Sprintf("an unknown merge method (%s)", autoMerge.MergeMethod) + } + fmt.Fprintf(out, + "%s %s by %s, using %s\n", + cs.Bold("Auto-merge:"), + cs.Green("enabled"), + autoMerge.EnabledBy.Login, + mergeMethod, + ) + } + // Body var md string var err error diff --git a/pkg/cmd/pr/view/view_test.go b/pkg/cmd/pr/view/view_test.go index 166289050..91b77cac8 100644 --- a/pkg/cmd/pr/view/view_test.go +++ b/pkg/cmd/pr/view/view_test.go @@ -314,6 +314,25 @@ func TestPRView_Preview_nontty(t *testing.T) { `\*\*blueberries taste good\*\*`, }, }, + "PR with auto-merge enabled": { + branch: "master", + args: "12", + fixtures: map[string]string{ + "PullRequestByNumber": "./fixtures/prViewPreviewWithAutoMergeEnabled.json", + }, + expectedOutputs: []string{ + `title:\tBlueberries are from a fork\n`, + `state:\tOPEN\n`, + `author:\tnobody\n`, + `labels:\t\n`, + `assignees:\t\n`, + `projects:\t\n`, + `milestone:\t\n`, + `additions:\t100\n`, + `deletions:\t10\n`, + `auto-merge:\tenabled\thubot\tsquash\n`, + }, + }, } for name, tc := range tests { @@ -504,6 +523,20 @@ func TestPRView_Preview(t *testing.T) { `View this pull request on GitHub: https://github.com/OWNER/REPO/pull/12`, }, }, + "PR with auto-merge enabled": { + branch: "master", + args: "12", + fixtures: map[string]string{ + "PullRequestByNumber": "./fixtures/prViewPreviewWithAutoMergeEnabled.json", + }, + expectedOutputs: []string{ + `Blueberries are from a fork #12\n`, + `Open.*nobody wants to merge 12 commits into master from blueberries . about X years ago`, + `Auto-merge:.*enabled.* by hubot, using squash and merge`, + `blueberries taste good`, + `View this pull request on GitHub: https://github.com/OWNER/REPO/pull/12`, + }, + }, } for name, tc := range tests {