From 951e6d8d7011fb34a4c547bfb6030d7fe6953df8 Mon Sep 17 00:00:00 2001 From: Corey Johnson Date: Tue, 26 May 2020 13:18:53 -0700 Subject: [PATCH 01/10] Add basic lookup functions --- command/pr.go | 6 +-- command/pr_lookup.go | 111 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 113 insertions(+), 4 deletions(-) create mode 100644 command/pr_lookup.go diff --git a/command/pr.go b/command/pr.go index dd19e011f..978cffca7 100644 --- a/command/pr.go +++ b/command/pr.go @@ -944,16 +944,14 @@ func prProjectList(pr api.PullRequest) string { return list } -var prURLRE = regexp.MustCompile(`^https://github\.com/([^/]+)/([^/]+)/pull/(\d+)`) - -func prFromURL(arg string) (string, ghrepo.Interface) { +func prFromURL_old(arg string) (string, ghrepo.Interface) { if m := prURLRE.FindStringSubmatch(arg); m != nil { return m[3], ghrepo.New(m[1], m[2]) } return "", nil } -func prFromArg(apiClient *api.Client, baseRepo ghrepo.Interface, arg string) (*api.PullRequest, error) { +func prFromArg_old(apiClient *api.Client, baseRepo ghrepo.Interface, arg string) (*api.PullRequest, error) { if prNumber, err := strconv.Atoi(strings.TrimPrefix(arg, "#")); err == nil { return api.PullRequestByNumber(apiClient, baseRepo, prNumber) } diff --git a/command/pr_lookup.go b/command/pr_lookup.go new file mode 100644 index 000000000..006a8d363 --- /dev/null +++ b/command/pr_lookup.go @@ -0,0 +1,111 @@ +package command + +import ( + "fmt" + "regexp" + "strconv" + "strings" + + "github.com/cli/cli/api" + "github.com/cli/cli/context" + "github.com/cli/cli/git" + "github.com/cli/cli/internal/ghrepo" +) + +func prFromArguments(ctx context.Context, repo ghrepo.Interface, args []string) (*api.PullRequest, error) { + apiClient, err := apiClientForContext(ctx) + if err != nil { + return nil, err + } + + if len(args) == 0 { + return prForCurrentBranch(ctx, repo) + } + + prString := args[0] + + // First check to see if the prString is a url + pr, err := prFromURL(ctx, repo, prString) + if pr != nil || err != nil { + return pr, err + } + + // Next see if the prString is a number and use that to look up the url + pr, err = prFromNumberString(ctx, repo, prString) + if pr != nil || err != nil { + return pr, err + } + + // Last see if it is a branch name + pr, err = api.PullRequestForBranch(apiClient, repo, "", prString) + return pr, err +} + +func prFromNumberString(ctx context.Context, repo ghrepo.Interface, s string) (*api.PullRequest, error) { + apiClient, err := apiClientForContext(ctx) + if err != nil { + return nil, err + } + + if prNumber, err := strconv.Atoi(strings.TrimPrefix(s, "#")); err == nil { + return api.PullRequestByNumber(apiClient, repo, prNumber) + } + + return nil, nil +} + +func prFromURL(ctx context.Context, repo ghrepo.Interface, s string) (*api.PullRequest, error) { + var r = regexp.MustCompile(`^https://github\.com/([^/]+)/([^/]+)/pull/(\d+)`) + if m := r.FindStringSubmatch(s); m != nil { + prNumberString := m[3] + return prFromNumberString(ctx, repo, prNumberString) + } + + return nil, nil +} + +func prForCurrentBranch(ctx context.Context, repo ghrepo.Interface) (*api.PullRequest, error) { + apiClient, err := apiClientForContext(ctx) + if err != nil { + return nil, err + } + + prHeadRef, err := ctx.Branch() + if err != nil { + return nil, err + } + + branchConfig := git.ReadBranchConfig(prHeadRef) + + // the branch is configured to merge a special PR head ref + prHeadRE := regexp.MustCompile(`^refs/pull/(\d+)/head$`) + if m := prHeadRE.FindStringSubmatch(branchConfig.MergeRef); m != nil { + return prFromNumberString(ctx, repo, m[1]) + } + + var branchOwner string + if branchConfig.RemoteURL != nil { + // the branch merges from a remote specified by URL + if r, err := ghrepo.FromURL(branchConfig.RemoteURL); err == nil { + branchOwner = r.RepoOwner() + } + } else if branchConfig.RemoteName != "" { + // the branch merges from a remote specified by name + rem, _ := ctx.Remotes() + if r, err := rem.FindByName(branchConfig.RemoteName); err == nil { + branchOwner = r.RepoOwner() + } + } + + if branchOwner == "" { + if strings.HasPrefix(branchConfig.MergeRef, "refs/heads/") { + prHeadRef = strings.TrimPrefix(branchConfig.MergeRef, "refs/heads/") + } + // prepend `OWNER:` if this branch is pushed to a fork + if !strings.EqualFold(branchOwner, repo.RepoOwner()) { + prHeadRef = fmt.Sprintf("%s:%s", branchOwner, prHeadRef) + } + } + + return api.PullRequestForBranch(apiClient, repo, "", prHeadRef) +} From 8d1f2745a428471330a6b70bd1276d892e58a848 Mon Sep 17 00:00:00 2001 From: Corey Johnson Date: Tue, 26 May 2020 16:35:35 -0700 Subject: [PATCH 02/10] wip --- api/queries_pr.go | 1 + command/pr.go | 133 +++++------------------------------------ command/pr_checkout.go | 12 ++-- command/pr_diff.go | 36 ++--------- command/pr_lookup.go | 4 +- command/pr_review.go | 44 ++------------ 6 files changed, 35 insertions(+), 195 deletions(-) diff --git a/api/queries_pr.go b/api/queries_pr.go index b2e6b5650..a157d7cf7 100644 --- a/api/queries_pr.go +++ b/api/queries_pr.go @@ -615,6 +615,7 @@ func PullRequestForBranch(client *Client, repo ghrepo.Interface, baseBranch, hea } for _, pr := range resp.Repository.PullRequests.Nodes { + fmt.Printf("🌭 %+v : %+v\n", pr.HeadLabel(), headBranch) if pr.HeadLabel() == headBranch { if baseBranch != "" { if pr.BaseRefName != baseBranch { diff --git a/command/pr.go b/command/pr.go index 978cffca7..e40e8af44 100644 --- a/command/pr.go +++ b/command/pr.go @@ -305,21 +305,9 @@ func prView(cmd *cobra.Command, args []string) error { return err } - var baseRepo ghrepo.Interface - var prArg string - if len(args) > 0 { - prArg = args[0] - if prNum, repo := prFromURL(prArg); repo != nil { - prArg = prNum - baseRepo = repo - } - } - - if baseRepo == nil { - baseRepo, err = determineBaseRepo(apiClient, cmd, ctx) - if err != nil { - return err - } + baseRepo, err := determineBaseRepo(apiClient, cmd, ctx) + if err != nil { + return err } web, err := cmd.Flags().GetBool("web") @@ -327,37 +315,11 @@ func prView(cmd *cobra.Command, args []string) error { return err } - var openURL string - var pr *api.PullRequest - if len(args) > 0 { - pr, err = prFromArg(apiClient, baseRepo, prArg) - if err != nil { - return err - } - openURL = pr.URL - } else { - prNumber, branchWithOwner, err := prSelectorForCurrentBranch(ctx, baseRepo) - if err != nil { - return err - } - - if prNumber > 0 { - openURL = fmt.Sprintf("https://github.com/%s/pull/%d", ghrepo.FullName(baseRepo), prNumber) - if !web { - pr, err = api.PullRequestByNumber(apiClient, baseRepo, prNumber) - if err != nil { - return err - } - } - } else { - pr, err = api.PullRequestForBranch(apiClient, baseRepo, "", branchWithOwner) - if err != nil { - return err - } - - openURL = pr.URL - } + pr, err := prFromArgs(ctx, baseRepo, args...) + if err != nil { + return err } + openURL := pr.URL if web { fmt.Fprintf(cmd.ErrOrStderr(), "Opening %s in your browser.\n", openURL) @@ -380,7 +342,7 @@ func prClose(cmd *cobra.Command, args []string) error { return err } - pr, err := prFromArg(apiClient, baseRepo, args[0]) + pr, err := prFromArgs(ctx, baseRepo, args...) if err != nil { return err } @@ -415,7 +377,7 @@ func prReopen(cmd *cobra.Command, args []string) error { return err } - pr, err := prFromArg(apiClient, baseRepo, args[0]) + pr, err := prFromArgs(ctx, baseRepo, args...) if err != nil { return err } @@ -452,34 +414,9 @@ func prMerge(cmd *cobra.Command, args []string) error { return err } - var pr *api.PullRequest - if len(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 - } - } else { - prNumber, branchWithOwner, err := prSelectorForCurrentBranch(ctx, baseRepo) - if err != nil { - return err - } - - if prNumber != 0 { - pr, err = api.PullRequestByNumber(apiClient, baseRepo, prNumber) - } else { - pr, err = api.PullRequestForBranch(apiClient, baseRepo, "", branchWithOwner) - } - if err != nil { - return err - } + pr, err := prFromArgs(ctx, baseRepo, args...) + if err != nil { + return err } if pr.Mergeable == "CONFLICTING" { @@ -720,34 +657,9 @@ func prReady(cmd *cobra.Command, args []string) error { return err } - var pr *api.PullRequest - if len(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 - } - } else { - prNumber, branchWithOwner, err := prSelectorForCurrentBranch(ctx, baseRepo) - if err != nil { - return err - } - - if prNumber != 0 { - pr, err = api.PullRequestByNumber(apiClient, baseRepo, prNumber) - } else { - pr, err = api.PullRequestForBranch(apiClient, baseRepo, "", branchWithOwner) - } - if err != nil { - return err - } + pr, err := prFromArgs(ctx, baseRepo, args...) + if err != nil { + return err } if pr.Closed { @@ -944,21 +856,6 @@ func prProjectList(pr api.PullRequest) string { return list } -func prFromURL_old(arg string) (string, ghrepo.Interface) { - if m := prURLRE.FindStringSubmatch(arg); m != nil { - return m[3], ghrepo.New(m[1], m[2]) - } - return "", nil -} - -func prFromArg_old(apiClient *api.Client, baseRepo ghrepo.Interface, arg string) (*api.PullRequest, error) { - if prNumber, err := strconv.Atoi(strings.TrimPrefix(arg, "#")); err == nil { - return api.PullRequestByNumber(apiClient, baseRepo, prNumber) - } - - return api.PullRequestForBranch(apiClient, baseRepo, "", arg) -} - func prSelectorForCurrentBranch(ctx context.Context, baseRepo ghrepo.Interface) (prNumber int, prHeadRef string, err error) { prHeadRef, err = ctx.Branch() if err != nil { diff --git a/command/pr_checkout.go b/command/pr_checkout.go index aa9e3afcc..dd5caf6db 100644 --- a/command/pr_checkout.go +++ b/command/pr_checkout.go @@ -5,6 +5,7 @@ import ( "fmt" "os" "os/exec" + "regexp" "github.com/spf13/cobra" @@ -27,10 +28,11 @@ func prCheckout(cmd *cobra.Command, args []string) error { } var baseRepo ghrepo.Interface - prArg := args[0] - if prNum, repo := prFromURL(prArg); repo != nil { - prArg = prNum - baseRepo = repo + prString := args[0] + r := regexp.MustCompile(`^https://github\.com/([^/]+)/([^/]+)/pull/(\d+)`) + if m := r.FindStringSubmatch(prString); m != nil { + prString = m[3] + baseRepo = ghrepo.New(m[1], m[2]) } if baseRepo == nil { @@ -40,7 +42,7 @@ func prCheckout(cmd *cobra.Command, args []string) error { } } - pr, err := prFromArg(apiClient, baseRepo, prArg) + pr, err := prFromArgs(ctx, baseRepo, prString) if err != nil { return err } diff --git a/command/pr_diff.go b/command/pr_diff.go index 6e4bb4bdb..c39c491a4 100644 --- a/command/pr_diff.go +++ b/command/pr_diff.go @@ -1,13 +1,10 @@ package command import ( - "errors" "fmt" "os" - "strconv" "strings" - "github.com/cli/cli/api" "github.com/cli/cli/utils" "github.com/spf13/cobra" ) @@ -44,38 +41,13 @@ func prDiff(cmd *cobra.Command, args []string) error { return fmt.Errorf("could not determine base repo: %w", err) } - // begin pr resolution boilerplate - var prNum int - branchWithOwner := "" + pr, err := prFromArgs(ctx, baseRepo, args...) - if len(args) == 0 { - prNum, branchWithOwner, err = prSelectorForCurrentBranch(ctx, baseRepo) - if err != nil { - return fmt.Errorf("could not query for pull request for current branch: %w", err) - } - } else { - prArg, repo := prFromURL(args[0]) - if repo != nil { - baseRepo = repo - } else { - prArg = strings.TrimPrefix(args[0], "#") - } - prNum, err = strconv.Atoi(prArg) - if err != nil { - return errors.New("could not parse pull request argument") - } + if err != nil { + return err } - if prNum < 1 { - pr, err := api.PullRequestForBranch(apiClient, baseRepo, "", branchWithOwner) - if err != nil { - return fmt.Errorf("could not find pull request: %w", err) - } - prNum = pr.Number - } - // end pr resolution boilerplate - - diff, err := apiClient.PullRequestDiff(baseRepo, prNum) + diff, err := apiClient.PullRequestDiff(baseRepo, pr.Number) if err != nil { return fmt.Errorf("could not find pull request diff: %w", err) } diff --git a/command/pr_lookup.go b/command/pr_lookup.go index 006a8d363..48cd824ff 100644 --- a/command/pr_lookup.go +++ b/command/pr_lookup.go @@ -12,7 +12,7 @@ import ( "github.com/cli/cli/internal/ghrepo" ) -func prFromArguments(ctx context.Context, repo ghrepo.Interface, args []string) (*api.PullRequest, error) { +func prFromArgs(ctx context.Context, repo ghrepo.Interface, args ...string) (*api.PullRequest, error) { apiClient, err := apiClientForContext(ctx) if err != nil { return nil, err @@ -55,7 +55,7 @@ func prFromNumberString(ctx context.Context, repo ghrepo.Interface, s string) (* } func prFromURL(ctx context.Context, repo ghrepo.Interface, s string) (*api.PullRequest, error) { - var r = regexp.MustCompile(`^https://github\.com/([^/]+)/([^/]+)/pull/(\d+)`) + r := regexp.MustCompile(`^https://github\.com/([^/]+)/([^/]+)/pull/(\d+)`) if m := r.FindStringSubmatch(s); m != nil { prNumberString := m[3] return prFromNumberString(ctx, repo, prNumberString) diff --git a/command/pr_review.go b/command/pr_review.go index 3b1a4ab88..5e3b122d3 100644 --- a/command/pr_review.go +++ b/command/pr_review.go @@ -3,8 +3,6 @@ package command import ( "errors" "fmt" - "strconv" - "strings" "github.com/AlecAivazis/survey/v2" "github.com/spf13/cobra" @@ -96,25 +94,9 @@ func prReview(cmd *cobra.Command, args []string) error { return fmt.Errorf("could not determine base repo: %w", err) } - var prNum int - branchWithOwner := "" - - if len(args) == 0 { - prNum, branchWithOwner, err = prSelectorForCurrentBranch(ctx, baseRepo) - if err != nil { - return fmt.Errorf("could not query for pull request for current branch: %w", err) - } - } else { - prArg, repo := prFromURL(args[0]) - if repo != nil { - baseRepo = repo - } else { - prArg = strings.TrimPrefix(args[0], "#") - } - prNum, err = strconv.Atoi(prArg) - if err != nil { - return errors.New("could not parse pull request argument") - } + pr, err := prFromArgs(ctx, baseRepo, args...) + if err != nil { + return err } reviewData, err := processReviewOpt(cmd) @@ -122,20 +104,6 @@ func prReview(cmd *cobra.Command, args []string) error { return fmt.Errorf("did not understand desired review action: %w", err) } - var pr *api.PullRequest - if prNum > 0 { - pr, err = api.PullRequestByNumber(apiClient, baseRepo, prNum) - if err != nil { - return fmt.Errorf("could not find pull request: %w", err) - } - } else { - pr, err = api.PullRequestForBranch(apiClient, baseRepo, "", branchWithOwner) - if err != nil { - return fmt.Errorf("could not find pull request: %w", err) - } - prNum = pr.Number - } - out := colorableOut(cmd) if reviewData == nil { @@ -156,11 +124,11 @@ func prReview(cmd *cobra.Command, args []string) error { switch reviewData.State { case api.ReviewComment: - fmt.Fprintf(out, "%s Reviewed pull request #%d\n", utils.Gray("-"), prNum) + fmt.Fprintf(out, "%s Reviewed pull request #%d\n", utils.Gray("-"), pr.Number) case api.ReviewApprove: - fmt.Fprintf(out, "%s Approved pull request #%d\n", utils.Green("✓"), prNum) + fmt.Fprintf(out, "%s Approved pull request #%d\n", utils.Green("✓"), pr.Number) case api.ReviewRequestChanges: - fmt.Fprintf(out, "%s Requested changes to pull request #%d\n", utils.Red("+"), prNum) + fmt.Fprintf(out, "%s Requested changes to pull request #%d\n", utils.Red("+"), pr.Number) } return nil From 30eb2d3ad65d67095e5b5bc84b34a0c7b5fd9f03 Mon Sep 17 00:00:00 2001 From: Corey Johnson Date: Tue, 26 May 2020 17:08:34 -0700 Subject: [PATCH 03/10] Fix test --- command/pr_diff.go | 3 +-- command/pr_lookup.go | 6 ++---- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/command/pr_diff.go b/command/pr_diff.go index c39c491a4..22217b35b 100644 --- a/command/pr_diff.go +++ b/command/pr_diff.go @@ -42,9 +42,8 @@ func prDiff(cmd *cobra.Command, args []string) error { } pr, err := prFromArgs(ctx, baseRepo, args...) - if err != nil { - return err + return fmt.Errorf("could not find pull request: %w", err) } diff, err := apiClient.PullRequestDiff(baseRepo, pr.Number) diff --git a/command/pr_lookup.go b/command/pr_lookup.go index 48cd824ff..7f169ff77 100644 --- a/command/pr_lookup.go +++ b/command/pr_lookup.go @@ -22,9 +22,8 @@ func prFromArgs(ctx context.Context, repo ghrepo.Interface, args ...string) (*ap return prForCurrentBranch(ctx, repo) } - prString := args[0] - // First check to see if the prString is a url + prString := args[0] pr, err := prFromURL(ctx, repo, prString) if pr != nil || err != nil { return pr, err @@ -37,8 +36,7 @@ func prFromArgs(ctx context.Context, repo ghrepo.Interface, args ...string) (*ap } // Last see if it is a branch name - pr, err = api.PullRequestForBranch(apiClient, repo, "", prString) - return pr, err + return api.PullRequestForBranch(apiClient, repo, "", prString) } func prFromNumberString(ctx context.Context, repo ghrepo.Interface, s string) (*api.PullRequest, error) { From e341d7b49f6e14cd6ac67055131febf9109b2e05 Mon Sep 17 00:00:00 2001 From: Corey Johnson Date: Wed, 27 May 2020 08:38:30 -0700 Subject: [PATCH 04/10] Fix test --- command/pr.go | 10 +++++----- command/pr_checkout.go | 2 +- command/pr_diff.go | 2 +- command/pr_diff_test.go | 5 +++++ command/pr_lookup.go | 33 +++++++++------------------------ command/pr_review.go | 2 +- 6 files changed, 22 insertions(+), 32 deletions(-) diff --git a/command/pr.go b/command/pr.go index e40e8af44..c9cc095d5 100644 --- a/command/pr.go +++ b/command/pr.go @@ -315,7 +315,7 @@ func prView(cmd *cobra.Command, args []string) error { return err } - pr, err := prFromArgs(ctx, baseRepo, args...) + pr, err := prFromArgs(ctx, apiClient, baseRepo, args...) if err != nil { return err } @@ -342,7 +342,7 @@ func prClose(cmd *cobra.Command, args []string) error { return err } - pr, err := prFromArgs(ctx, baseRepo, args...) + pr, err := prFromArgs(ctx, apiClient, baseRepo, args...) if err != nil { return err } @@ -377,7 +377,7 @@ func prReopen(cmd *cobra.Command, args []string) error { return err } - pr, err := prFromArgs(ctx, baseRepo, args...) + pr, err := prFromArgs(ctx, apiClient, baseRepo, args...) if err != nil { return err } @@ -414,7 +414,7 @@ func prMerge(cmd *cobra.Command, args []string) error { return err } - pr, err := prFromArgs(ctx, baseRepo, args...) + pr, err := prFromArgs(ctx, apiClient, baseRepo, args...) if err != nil { return err } @@ -657,7 +657,7 @@ func prReady(cmd *cobra.Command, args []string) error { return err } - pr, err := prFromArgs(ctx, baseRepo, args...) + pr, err := prFromArgs(ctx, apiClient, baseRepo, args...) if err != nil { return err } diff --git a/command/pr_checkout.go b/command/pr_checkout.go index dd5caf6db..a8bf710b9 100644 --- a/command/pr_checkout.go +++ b/command/pr_checkout.go @@ -42,7 +42,7 @@ func prCheckout(cmd *cobra.Command, args []string) error { } } - pr, err := prFromArgs(ctx, baseRepo, prString) + pr, err := prFromArgs(ctx, apiClient, baseRepo, prString) if err != nil { return err } diff --git a/command/pr_diff.go b/command/pr_diff.go index 22217b35b..48ca42bbb 100644 --- a/command/pr_diff.go +++ b/command/pr_diff.go @@ -41,7 +41,7 @@ func prDiff(cmd *cobra.Command, args []string) error { return fmt.Errorf("could not determine base repo: %w", err) } - pr, err := prFromArgs(ctx, baseRepo, args...) + pr, err := prFromArgs(ctx, apiClient, baseRepo, args...) if err != nil { return fmt.Errorf("could not find pull request: %w", err) } diff --git a/command/pr_diff_test.go b/command/pr_diff_test.go index ab883dcab..725b21f03 100644 --- a/command/pr_diff_test.go +++ b/command/pr_diff_test.go @@ -37,6 +37,11 @@ func TestPRDiff_argument_not_found(t *testing.T) { initBlankContext("", "OWNER/REPO", "master") http := initFakeHTTP() http.StubRepoResponse("OWNER", "REPO") + http.StubResponse(200, bytes.NewBufferString(` + { "data": { "repository": { + "pullRequest": { "number": 123 } + } } } +`)) http.StubResponse(404, bytes.NewBufferString("")) _, err := RunCommand("pr diff 123") if err == nil { diff --git a/command/pr_lookup.go b/command/pr_lookup.go index 7f169ff77..df97930c6 100644 --- a/command/pr_lookup.go +++ b/command/pr_lookup.go @@ -12,25 +12,20 @@ import ( "github.com/cli/cli/internal/ghrepo" ) -func prFromArgs(ctx context.Context, repo ghrepo.Interface, args ...string) (*api.PullRequest, error) { - apiClient, err := apiClientForContext(ctx) - if err != nil { - return nil, err - } - +func prFromArgs(ctx context.Context, apiClient *api.Client, repo ghrepo.Interface, args ...string) (*api.PullRequest, error) { if len(args) == 0 { - return prForCurrentBranch(ctx, repo) + return prForCurrentBranch(ctx, apiClient, repo) } // First check to see if the prString is a url prString := args[0] - pr, err := prFromURL(ctx, repo, prString) + pr, err := prFromURL(ctx, apiClient, repo, prString) if pr != nil || err != nil { return pr, err } // Next see if the prString is a number and use that to look up the url - pr, err = prFromNumberString(ctx, repo, prString) + pr, err = prFromNumberString(ctx, apiClient, repo, prString) if pr != nil || err != nil { return pr, err } @@ -39,12 +34,7 @@ func prFromArgs(ctx context.Context, repo ghrepo.Interface, args ...string) (*ap return api.PullRequestForBranch(apiClient, repo, "", prString) } -func prFromNumberString(ctx context.Context, repo ghrepo.Interface, s string) (*api.PullRequest, error) { - apiClient, err := apiClientForContext(ctx) - if err != nil { - return nil, err - } - +func prFromNumberString(ctx context.Context, apiClient *api.Client, repo ghrepo.Interface, s string) (*api.PullRequest, error) { if prNumber, err := strconv.Atoi(strings.TrimPrefix(s, "#")); err == nil { return api.PullRequestByNumber(apiClient, repo, prNumber) } @@ -52,22 +42,17 @@ func prFromNumberString(ctx context.Context, repo ghrepo.Interface, s string) (* return nil, nil } -func prFromURL(ctx context.Context, repo ghrepo.Interface, s string) (*api.PullRequest, error) { +func prFromURL(ctx context.Context, apiClient *api.Client, repo ghrepo.Interface, s string) (*api.PullRequest, error) { r := regexp.MustCompile(`^https://github\.com/([^/]+)/([^/]+)/pull/(\d+)`) if m := r.FindStringSubmatch(s); m != nil { prNumberString := m[3] - return prFromNumberString(ctx, repo, prNumberString) + return prFromNumberString(ctx, apiClient, repo, prNumberString) } return nil, nil } -func prForCurrentBranch(ctx context.Context, repo ghrepo.Interface) (*api.PullRequest, error) { - apiClient, err := apiClientForContext(ctx) - if err != nil { - return nil, err - } - +func prForCurrentBranch(ctx context.Context, apiClient *api.Client, repo ghrepo.Interface) (*api.PullRequest, error) { prHeadRef, err := ctx.Branch() if err != nil { return nil, err @@ -78,7 +63,7 @@ func prForCurrentBranch(ctx context.Context, repo ghrepo.Interface) (*api.PullRe // the branch is configured to merge a special PR head ref prHeadRE := regexp.MustCompile(`^refs/pull/(\d+)/head$`) if m := prHeadRE.FindStringSubmatch(branchConfig.MergeRef); m != nil { - return prFromNumberString(ctx, repo, m[1]) + return prFromNumberString(ctx, apiClient, repo, m[1]) } var branchOwner string diff --git a/command/pr_review.go b/command/pr_review.go index 5e3b122d3..3d2d17558 100644 --- a/command/pr_review.go +++ b/command/pr_review.go @@ -94,7 +94,7 @@ func prReview(cmd *cobra.Command, args []string) error { return fmt.Errorf("could not determine base repo: %w", err) } - pr, err := prFromArgs(ctx, baseRepo, args...) + pr, err := prFromArgs(ctx, apiClient, baseRepo, args...) if err != nil { return err } From 4b03cb112c6b1e08e2c2c259b4a9c73c358267ce Mon Sep 17 00:00:00 2001 From: Corey Johnson Date: Wed, 27 May 2020 09:21:02 -0700 Subject: [PATCH 05/10] Update test stubs --- api/queries_pr.go | 1 - command/pr_lookup.go | 2 +- command/pr_review_test.go | 22 +++++++++++++++++++++- command/pr_test.go | 7 ++++--- 4 files changed, 26 insertions(+), 6 deletions(-) diff --git a/api/queries_pr.go b/api/queries_pr.go index a157d7cf7..b2e6b5650 100644 --- a/api/queries_pr.go +++ b/api/queries_pr.go @@ -615,7 +615,6 @@ func PullRequestForBranch(client *Client, repo ghrepo.Interface, baseBranch, hea } for _, pr := range resp.Repository.PullRequests.Nodes { - fmt.Printf("🌭 %+v : %+v\n", pr.HeadLabel(), headBranch) if pr.HeadLabel() == headBranch { if baseBranch != "" { if pr.BaseRefName != baseBranch { diff --git a/command/pr_lookup.go b/command/pr_lookup.go index df97930c6..6e53cfc54 100644 --- a/command/pr_lookup.go +++ b/command/pr_lookup.go @@ -80,7 +80,7 @@ func prForCurrentBranch(ctx context.Context, apiClient *api.Client, repo ghrepo. } } - if branchOwner == "" { + if branchOwner != "" { if strings.HasPrefix(branchConfig.MergeRef, "refs/heads/") { prHeadRef = strings.TrimPrefix(branchConfig.MergeRef, "refs/heads/") } diff --git a/command/pr_review_test.go b/command/pr_review_test.go index c6c56c00d..e2c54e715 100644 --- a/command/pr_review_test.go +++ b/command/pr_review_test.go @@ -18,6 +18,11 @@ func TestPRReview_validation(t *testing.T) { `pr review --approve --comment -b"hey" 123`, } { http.StubRepoResponse("OWNER", "REPO") + http.StubResponse(200, bytes.NewBufferString(` + { "data": { "repository": { + "pullRequest": { "number": 123 } + } } } + `)) _, err := RunCommand(cmd) if err == nil { t.Fatal("expected error") @@ -30,7 +35,12 @@ func TestPRReview_bad_body(t *testing.T) { initBlankContext("", "OWNER/REPO", "master") http := initFakeHTTP() http.StubRepoResponse("OWNER", "REPO") - _, err := RunCommand(`pr review -b "radical"`) + http.StubResponse(200, bytes.NewBufferString(` + { "data": { "repository": { + "pullRequest": { "number": 123 } + } } } + `)) + _, err := RunCommand(`pr review 123 -b "radical"`) if err == nil { t.Fatal("expected error") } @@ -173,6 +183,11 @@ func TestPRReview_blank_comment(t *testing.T) { initBlankContext("", "OWNER/REPO", "master") http := initFakeHTTP() http.StubRepoResponse("OWNER", "REPO") + http.StubResponse(200, bytes.NewBufferString(` + { "data": { "repository": { + "pullRequest": { "number": 123 } + } } } + `)) _, err := RunCommand(`pr review --comment 123`) eq(t, err.Error(), "did not understand desired review action: body cannot be blank for comment review") @@ -182,6 +197,11 @@ func TestPRReview_blank_request_changes(t *testing.T) { initBlankContext("", "OWNER/REPO", "master") http := initFakeHTTP() http.StubRepoResponse("OWNER", "REPO") + http.StubResponse(200, bytes.NewBufferString(` + { "data": { "repository": { + "pullRequest": { "number": 123 } + } } } + `)) _, err := RunCommand(`pr review -r 123`) eq(t, err.Error(), "did not understand desired review action: body cannot be blank for request-changes review") diff --git a/command/pr_test.go b/command/pr_test.go index 86e2d4ecd..ef483c7d2 100644 --- a/command/pr_test.go +++ b/command/pr_test.go @@ -723,10 +723,11 @@ func TestPRView_web_urlArg(t *testing.T) { initBlankContext("", "OWNER/REPO", "master") http := initFakeHTTP() + http.StubRepoResponse("OWNER", "REPO") http.StubResponse(200, bytes.NewBufferString(` - { "data": { "repository": { "pullRequest": { - "url": "https://github.com/OWNER/REPO/pull/23" - } } } } + { "data": { "repository": { "pullRequest": { + "url": "https://github.com/OWNER/REPO/pull/23" + } } } } `)) var seenCmd *exec.Cmd From 15770881bb5ba1f706d685e0366cbb718b757aa6 Mon Sep 17 00:00:00 2001 From: Corey Johnson Date: Wed, 27 May 2020 10:08:29 -0700 Subject: [PATCH 06/10] Use an array --- command/pr.go | 10 +++++----- command/pr_checkout.go | 2 +- command/pr_diff.go | 2 +- command/pr_lookup.go | 2 +- command/pr_review.go | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/command/pr.go b/command/pr.go index c9cc095d5..4daa2db0a 100644 --- a/command/pr.go +++ b/command/pr.go @@ -315,7 +315,7 @@ func prView(cmd *cobra.Command, args []string) error { return err } - pr, err := prFromArgs(ctx, apiClient, baseRepo, args...) + pr, err := prFromArgs(ctx, apiClient, baseRepo, args) if err != nil { return err } @@ -342,7 +342,7 @@ func prClose(cmd *cobra.Command, args []string) error { return err } - pr, err := prFromArgs(ctx, apiClient, baseRepo, args...) + pr, err := prFromArgs(ctx, apiClient, baseRepo, args) if err != nil { return err } @@ -377,7 +377,7 @@ func prReopen(cmd *cobra.Command, args []string) error { return err } - pr, err := prFromArgs(ctx, apiClient, baseRepo, args...) + pr, err := prFromArgs(ctx, apiClient, baseRepo, args) if err != nil { return err } @@ -414,7 +414,7 @@ func prMerge(cmd *cobra.Command, args []string) error { return err } - pr, err := prFromArgs(ctx, apiClient, baseRepo, args...) + pr, err := prFromArgs(ctx, apiClient, baseRepo, args) if err != nil { return err } @@ -657,7 +657,7 @@ func prReady(cmd *cobra.Command, args []string) error { return err } - pr, err := prFromArgs(ctx, apiClient, baseRepo, args...) + pr, err := prFromArgs(ctx, apiClient, baseRepo, args) if err != nil { return err } diff --git a/command/pr_checkout.go b/command/pr_checkout.go index a8bf710b9..757df0fd5 100644 --- a/command/pr_checkout.go +++ b/command/pr_checkout.go @@ -42,7 +42,7 @@ func prCheckout(cmd *cobra.Command, args []string) error { } } - pr, err := prFromArgs(ctx, apiClient, baseRepo, prString) + pr, err := prFromArgs(ctx, apiClient, baseRepo, []string{prString}) if err != nil { return err } diff --git a/command/pr_diff.go b/command/pr_diff.go index 48ca42bbb..7e2eff78c 100644 --- a/command/pr_diff.go +++ b/command/pr_diff.go @@ -41,7 +41,7 @@ func prDiff(cmd *cobra.Command, args []string) error { return fmt.Errorf("could not determine base repo: %w", err) } - pr, err := prFromArgs(ctx, apiClient, baseRepo, args...) + pr, err := prFromArgs(ctx, apiClient, baseRepo, args) if err != nil { return fmt.Errorf("could not find pull request: %w", err) } diff --git a/command/pr_lookup.go b/command/pr_lookup.go index 6e53cfc54..a5e380b47 100644 --- a/command/pr_lookup.go +++ b/command/pr_lookup.go @@ -12,7 +12,7 @@ import ( "github.com/cli/cli/internal/ghrepo" ) -func prFromArgs(ctx context.Context, apiClient *api.Client, repo ghrepo.Interface, args ...string) (*api.PullRequest, error) { +func prFromArgs(ctx context.Context, apiClient *api.Client, repo ghrepo.Interface, args []string) (*api.PullRequest, error) { if len(args) == 0 { return prForCurrentBranch(ctx, apiClient, repo) } diff --git a/command/pr_review.go b/command/pr_review.go index 3d2d17558..b0a1f2062 100644 --- a/command/pr_review.go +++ b/command/pr_review.go @@ -94,7 +94,7 @@ func prReview(cmd *cobra.Command, args []string) error { return fmt.Errorf("could not determine base repo: %w", err) } - pr, err := prFromArgs(ctx, apiClient, baseRepo, args...) + pr, err := prFromArgs(ctx, apiClient, baseRepo, args) if err != nil { return err } From a7e8d6fba88d9acfd3ec36c1f9defa3f242855af Mon Sep 17 00:00:00 2001 From: Corey Johnson Date: Wed, 27 May 2020 10:10:21 -0700 Subject: [PATCH 07/10] Make PullRequestDiff take a pr --- api/queries_pr.go | 5 ++--- command/pr_diff.go | 2 +- go.mod | 1 + go.sum | 29 +++++++++++++++++++++++++++++ 4 files changed, 33 insertions(+), 4 deletions(-) diff --git a/api/queries_pr.go b/api/queries_pr.go index b2e6b5650..d1dedb82d 100644 --- a/api/queries_pr.go +++ b/api/queries_pr.go @@ -205,9 +205,9 @@ func (pr *PullRequest) ChecksStatus() (summary PullRequestChecksStatus) { return } -func (c Client) PullRequestDiff(baseRepo ghrepo.Interface, prNum int) (string, error) { +func (c Client) PullRequestDiff(baseRepo ghrepo.Interface, pr *PullRequest) (string, error) { url := fmt.Sprintf("https://api.github.com/repos/%s/pulls/%d", - ghrepo.FullName(baseRepo), prNum) + ghrepo.FullName(baseRepo), pr.Number) req, err := http.NewRequest("GET", url, nil) if err != nil { return "", err @@ -235,7 +235,6 @@ func (c Client) PullRequestDiff(baseRepo ghrepo.Interface, prNum int) (string, e } return "", errors.New("pull request diff lookup failed") - } func PullRequests(client *Client, repo ghrepo.Interface, currentPRNumber int, currentPRHeadRef, currentUsername string) (*PullRequestsPayload, error) { diff --git a/command/pr_diff.go b/command/pr_diff.go index 7e2eff78c..1f89d59cb 100644 --- a/command/pr_diff.go +++ b/command/pr_diff.go @@ -46,7 +46,7 @@ func prDiff(cmd *cobra.Command, args []string) error { return fmt.Errorf("could not find pull request: %w", err) } - diff, err := apiClient.PullRequestDiff(baseRepo, pr.Number) + diff, err := apiClient.PullRequestDiff(baseRepo, pr) if err != nil { return fmt.Errorf("could not find pull request diff: %w", err) } diff --git a/go.mod b/go.mod index 193320caa..d7a3e1f37 100644 --- a/go.mod +++ b/go.mod @@ -7,6 +7,7 @@ require ( github.com/briandowns/spinner v1.10.1-0.20200410162419-bf6cf7ae6727 github.com/charmbracelet/glamour v0.1.1-0.20200320173916-301d3bcf3058 github.com/dlclark/regexp2 v1.2.0 // indirect + github.com/go-delve/delve v1.4.1 github.com/google/go-cmp v0.2.0 github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 github.com/hashicorp/go-version v1.2.0 diff --git a/go.sum b/go.sum index 807e68f62..acee22459 100644 --- a/go.sum +++ b/go.sum @@ -31,8 +31,12 @@ github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/cosiner/argv v0.0.0-20170225145430-13bacc38a0a5/go.mod h1:p/NrK5tF6ICIly4qwEDsf6VDirFiWWz0FenfYBwJaKQ= +github.com/cpuguy83/go-md2man v1.0.10 h1:BSKMNlYxDvnunlTymqtgONjNnaRV1sTpcovwwjF22jk= +github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0 h1:EoUDS0afbrsXAZ9YQ9jdu/mZ2sXgT1/2yyNng4PGlyM= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/danwakefield/fnmatch v0.0.0-20160403171240-cbb64ac3d964 h1:y5HC9v93H5EPKqaS1UYVg1uYah5Xf51mBfIoWehClUQ= github.com/danwakefield/fnmatch v0.0.0-20160403171240-cbb64ac3d964/go.mod h1:Xd9hchkHSWYkEqJwUGisez3G1QY8Ryz0sdWrLPMGjLk= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -48,6 +52,8 @@ github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/go-delve/delve v1.4.1 h1:kZs0umEv+VKnK84kY9/ZXWrakdLTeRTyYjFdgLelZCQ= +github.com/go-delve/delve v1.4.1/go.mod h1:vmy6iObn7zg8FQ5KOCIe6TruMNsqpoZO8uMiRea+97k= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= @@ -63,6 +69,7 @@ github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5y github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/go-cmp v0.2.0 h1:+dTQ8DZQJz0Mb/HjFlkptS1FeQ4cWSnN941F8aEG4SQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-dap v0.2.0/go.mod h1:5q8aYQFnHOAZEMP+6vmq25HKYAEwE+LF5yh7JKrrhSQ= github.com/google/goterm v0.0.0-20190703233501-fc88cf888a3f h1:5CjVwnuUcp5adK4gmY6i72gpVFVnZDP2h5TmPScB6u4= github.com/google/goterm v0.0.0-20190703233501-fc88cf888a3f/go.mod h1:nOFQdrUlIlx6M6ODdSpBj1NVA+VgLC6kmw60mkw34H4= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= @@ -73,6 +80,8 @@ github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgf github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/hashicorp/go-version v1.2.0 h1:3vNe/fWF5CBgRIguda1meWhsZHy3m8gCJ5wx+dIzX/E= github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= +github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/henvic/httpretty v0.0.4 h1:hyMkO0HugjsmWu63Z+7chDw7+RilkKBJ1vCwlqUOvOk= github.com/henvic/httpretty v0.0.4/go.mod h1:X38wLjWXHkXT7r2+uK8LjCMne9rsuNaBLJ+5cU2/Pmo= @@ -87,6 +96,7 @@ github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:C github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= @@ -98,11 +108,13 @@ github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/lucasb-eyer/go-colorful v1.0.3 h1:QIbQXiugsb+q10B+MI+7DI1oQLdmnep86tWFlaaUAac= github.com/lucasb-eyer/go-colorful v1.0.3/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/mattn/go-colorable v0.0.0-20170327083344-ded68f7a9561/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.2 h1:/bC9yWikZXAL9uJdulbSfyVNIR3n3trXl+v8+1sx8mU= github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.6 h1:6Su7aK7lXmJ/U79bYtBjLNaha4Fs1Rg9plHpcH+vvnE= github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= @@ -128,6 +140,7 @@ github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn github.com/olekukonko/tablewriter v0.0.4 h1:vHD/YYe1Wolo78koG299f7V/VAS08c6IpCLn+Ejf/w8= github.com/olekukonko/tablewriter v0.0.4/go.mod h1:zq6QwlOf5SlnkVbMSr5EoBv3636FWnp+qbPhuoO21uA= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +github.com/peterh/liner v0.0.0-20170317030525-88609521dc4b/go.mod h1:xIteQHvHuaLYG9IFj6mSxM0fCKrs34IrEQUhOYuGPHc= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -143,6 +156,8 @@ github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= +github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo= +github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/sergi/go-diff v1.0.0 h1:Kpca3qRNrduNnOQeazBd0ysaKrUJiIuISHxogkT9RPQ= @@ -154,13 +169,17 @@ github.com/shurcooL/graphql v0.0.0-20181231061246-d48a9a75455f/go.mod h1:AuYgA5K github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.6.0 h1:UBcNElsrwanuuMsnGSlYmtmgbb23qDR5dG+6X6Oo89I= +github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cobra v0.0.0-20170417170307-b6cb39589372/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.6 h1:breEStsVwemnKh2/s6gMvSdMEkwW0sK8vGStnlVBMCs= github.com/spf13/cobra v0.0.6/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/pflag v0.0.0-20170417173400-9e4c21054fa1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= @@ -181,9 +200,12 @@ github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1: github.com/yuin/goldmark v1.1.24 h1:K4FemPDr4x/ZcqldoXWnexTLfdMIy2eEfXxsLnotTRI= github.com/yuin/goldmark v1.1.24/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.starlark.net v0.0.0-20190702223751-32f345186213/go.mod h1:c1/X6cHgvdXj6pUlmWKMkuqRnW4K8x2vwt6JAaaircg= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +golang.org/x/arch v0.0.0-20190927153633-4e8777c89be4 h1:QlVATYS7JBoZMVaf+cNjb90WD/beKVHnIxFKT4QaHVI= +golang.org/x/arch v0.0.0-20190927153633-4e8777c89be4/go.mod h1:flIaEI6LNU6xOCD5PaJvn9wGP0agmIOqjrtsKGRguv4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190530122614-20be4c3c3ed5 h1:8dUaAV7K4uHsF56JQWkprecIQKdPHtR9jCHF5nB8uzc= @@ -199,6 +221,7 @@ golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3 h1:0GoQqolDA55aaLxZyTzK/Y2ePZzZTUrRacwib7cNsYQ= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200219183655-46282727080f h1:dB42wwhNuwPvh8f+5zZWNcU+F2Xs/B9wXXwvUCOH7r8= golang.org/x/net v0.0.0-20200219183655-46282727080f/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be h1:vEDujvNQGv4jgYKudGeI/+DAX4Jffq6hpD55MmoEvKs= @@ -206,6 +229,7 @@ golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAG golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -214,7 +238,9 @@ golang.org/x/sys v0.0.0-20181128092732-4ed8d59d0b35/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190530182044-ad28b68e88f1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae h1:/WDfKMnPU+m5M4xB+6x4kaepxRw6jWvR5iDRdvjHgy8= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -227,6 +253,8 @@ golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGm golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20191127201027-ecd32218bd7f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/appengine v1.1.0 h1:igQkv0AAhEIvTEpD5LIpAfav2eeVO9HBTjvKHVJPRSs= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= @@ -247,3 +275,4 @@ gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v3 v3.0.0-20200121175148-a6ecf24a6d71 h1:Xe2gvTZUJpsvOWUnvmL/tmhVBZUmHSvLbMjRj6NUUKo= gopkg.in/yaml.v3 v3.0.0-20200121175148-a6ecf24a6d71/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= From de6b1e07861d74a4e1866c95dde9b939e2f41efc Mon Sep 17 00:00:00 2001 From: Corey Johnson Date: Wed, 27 May 2020 10:40:30 -0700 Subject: [PATCH 08/10] remove dep --- go.mod | 1 - go.sum | 29 ----------------------------- 2 files changed, 30 deletions(-) diff --git a/go.mod b/go.mod index d7a3e1f37..193320caa 100644 --- a/go.mod +++ b/go.mod @@ -7,7 +7,6 @@ require ( github.com/briandowns/spinner v1.10.1-0.20200410162419-bf6cf7ae6727 github.com/charmbracelet/glamour v0.1.1-0.20200320173916-301d3bcf3058 github.com/dlclark/regexp2 v1.2.0 // indirect - github.com/go-delve/delve v1.4.1 github.com/google/go-cmp v0.2.0 github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 github.com/hashicorp/go-version v1.2.0 diff --git a/go.sum b/go.sum index acee22459..807e68f62 100644 --- a/go.sum +++ b/go.sum @@ -31,12 +31,8 @@ github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/cosiner/argv v0.0.0-20170225145430-13bacc38a0a5/go.mod h1:p/NrK5tF6ICIly4qwEDsf6VDirFiWWz0FenfYBwJaKQ= -github.com/cpuguy83/go-md2man v1.0.10 h1:BSKMNlYxDvnunlTymqtgONjNnaRV1sTpcovwwjF22jk= -github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0 h1:EoUDS0afbrsXAZ9YQ9jdu/mZ2sXgT1/2yyNng4PGlyM= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/danwakefield/fnmatch v0.0.0-20160403171240-cbb64ac3d964 h1:y5HC9v93H5EPKqaS1UYVg1uYah5Xf51mBfIoWehClUQ= github.com/danwakefield/fnmatch v0.0.0-20160403171240-cbb64ac3d964/go.mod h1:Xd9hchkHSWYkEqJwUGisez3G1QY8Ryz0sdWrLPMGjLk= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -52,8 +48,6 @@ github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/go-delve/delve v1.4.1 h1:kZs0umEv+VKnK84kY9/ZXWrakdLTeRTyYjFdgLelZCQ= -github.com/go-delve/delve v1.4.1/go.mod h1:vmy6iObn7zg8FQ5KOCIe6TruMNsqpoZO8uMiRea+97k= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= @@ -69,7 +63,6 @@ github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5y github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/go-cmp v0.2.0 h1:+dTQ8DZQJz0Mb/HjFlkptS1FeQ4cWSnN941F8aEG4SQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-dap v0.2.0/go.mod h1:5q8aYQFnHOAZEMP+6vmq25HKYAEwE+LF5yh7JKrrhSQ= github.com/google/goterm v0.0.0-20190703233501-fc88cf888a3f h1:5CjVwnuUcp5adK4gmY6i72gpVFVnZDP2h5TmPScB6u4= github.com/google/goterm v0.0.0-20190703233501-fc88cf888a3f/go.mod h1:nOFQdrUlIlx6M6ODdSpBj1NVA+VgLC6kmw60mkw34H4= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= @@ -80,8 +73,6 @@ github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgf github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/hashicorp/go-version v1.2.0 h1:3vNe/fWF5CBgRIguda1meWhsZHy3m8gCJ5wx+dIzX/E= github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= -github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/henvic/httpretty v0.0.4 h1:hyMkO0HugjsmWu63Z+7chDw7+RilkKBJ1vCwlqUOvOk= github.com/henvic/httpretty v0.0.4/go.mod h1:X38wLjWXHkXT7r2+uK8LjCMne9rsuNaBLJ+5cU2/Pmo= @@ -96,7 +87,6 @@ github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:C github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= @@ -108,13 +98,11 @@ github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/lucasb-eyer/go-colorful v1.0.3 h1:QIbQXiugsb+q10B+MI+7DI1oQLdmnep86tWFlaaUAac= github.com/lucasb-eyer/go-colorful v1.0.3/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/mattn/go-colorable v0.0.0-20170327083344-ded68f7a9561/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.2 h1:/bC9yWikZXAL9uJdulbSfyVNIR3n3trXl+v8+1sx8mU= github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.6 h1:6Su7aK7lXmJ/U79bYtBjLNaha4Fs1Rg9plHpcH+vvnE= github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= @@ -140,7 +128,6 @@ github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn github.com/olekukonko/tablewriter v0.0.4 h1:vHD/YYe1Wolo78koG299f7V/VAS08c6IpCLn+Ejf/w8= github.com/olekukonko/tablewriter v0.0.4/go.mod h1:zq6QwlOf5SlnkVbMSr5EoBv3636FWnp+qbPhuoO21uA= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/peterh/liner v0.0.0-20170317030525-88609521dc4b/go.mod h1:xIteQHvHuaLYG9IFj6mSxM0fCKrs34IrEQUhOYuGPHc= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -156,8 +143,6 @@ github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= -github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo= -github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/sergi/go-diff v1.0.0 h1:Kpca3qRNrduNnOQeazBd0ysaKrUJiIuISHxogkT9RPQ= @@ -169,17 +154,13 @@ github.com/shurcooL/graphql v0.0.0-20181231061246-d48a9a75455f/go.mod h1:AuYgA5K github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.6.0 h1:UBcNElsrwanuuMsnGSlYmtmgbb23qDR5dG+6X6Oo89I= -github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cobra v0.0.0-20170417170307-b6cb39589372/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.6 h1:breEStsVwemnKh2/s6gMvSdMEkwW0sK8vGStnlVBMCs= github.com/spf13/cobra v0.0.6/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/pflag v0.0.0-20170417173400-9e4c21054fa1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= @@ -200,12 +181,9 @@ github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1: github.com/yuin/goldmark v1.1.24 h1:K4FemPDr4x/ZcqldoXWnexTLfdMIy2eEfXxsLnotTRI= github.com/yuin/goldmark v1.1.24/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.starlark.net v0.0.0-20190702223751-32f345186213/go.mod h1:c1/X6cHgvdXj6pUlmWKMkuqRnW4K8x2vwt6JAaaircg= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -golang.org/x/arch v0.0.0-20190927153633-4e8777c89be4 h1:QlVATYS7JBoZMVaf+cNjb90WD/beKVHnIxFKT4QaHVI= -golang.org/x/arch v0.0.0-20190927153633-4e8777c89be4/go.mod h1:flIaEI6LNU6xOCD5PaJvn9wGP0agmIOqjrtsKGRguv4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190530122614-20be4c3c3ed5 h1:8dUaAV7K4uHsF56JQWkprecIQKdPHtR9jCHF5nB8uzc= @@ -221,7 +199,6 @@ golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3 h1:0GoQqolDA55aaLxZyTzK/Y2ePZzZTUrRacwib7cNsYQ= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200219183655-46282727080f h1:dB42wwhNuwPvh8f+5zZWNcU+F2Xs/B9wXXwvUCOH7r8= golang.org/x/net v0.0.0-20200219183655-46282727080f/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be h1:vEDujvNQGv4jgYKudGeI/+DAX4Jffq6hpD55MmoEvKs= @@ -229,7 +206,6 @@ golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAG golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -238,9 +214,7 @@ golang.org/x/sys v0.0.0-20181128092732-4ed8d59d0b35/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190530182044-ad28b68e88f1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae h1:/WDfKMnPU+m5M4xB+6x4kaepxRw6jWvR5iDRdvjHgy8= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -253,8 +227,6 @@ golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGm golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20191127201027-ecd32218bd7f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/appengine v1.1.0 h1:igQkv0AAhEIvTEpD5LIpAfav2eeVO9HBTjvKHVJPRSs= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= @@ -275,4 +247,3 @@ gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v3 v3.0.0-20200121175148-a6ecf24a6d71 h1:Xe2gvTZUJpsvOWUnvmL/tmhVBZUmHSvLbMjRj6NUUKo= gopkg.in/yaml.v3 v3.0.0-20200121175148-a6ecf24a6d71/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= From 4c75c8bccc429cabe66bfd004f959e3db45dfd09 Mon Sep 17 00:00:00 2001 From: Corey Johnson Date: Wed, 3 Jun 2020 14:34:13 -0700 Subject: [PATCH 09/10] Reset base branch when URL is used --- api/queries_pr.go | 4 ++-- command/pr.go | 35 +++++------------------------------ command/pr_checkout.go | 19 ++----------------- command/pr_checkout_test.go | 5 +++-- command/pr_diff.go | 9 ++------- command/pr_lookup.go | 32 +++++++++++++++++++++----------- command/pr_review.go | 7 +------ 7 files changed, 36 insertions(+), 75 deletions(-) diff --git a/api/queries_pr.go b/api/queries_pr.go index d1dedb82d..ad42deb0f 100644 --- a/api/queries_pr.go +++ b/api/queries_pr.go @@ -205,9 +205,9 @@ func (pr *PullRequest) ChecksStatus() (summary PullRequestChecksStatus) { return } -func (c Client) PullRequestDiff(baseRepo ghrepo.Interface, pr *PullRequest) (string, error) { +func (c Client) PullRequestDiff(baseRepo ghrepo.Interface, prNumber int) (string, error) { url := fmt.Sprintf("https://api.github.com/repos/%s/pulls/%d", - ghrepo.FullName(baseRepo), pr.Number) + ghrepo.FullName(baseRepo), prNumber) req, err := http.NewRequest("GET", url, nil) if err != nil { return "", err diff --git a/command/pr.go b/command/pr.go index 4daa2db0a..5bdf51e3f 100644 --- a/command/pr.go +++ b/command/pr.go @@ -305,17 +305,12 @@ func prView(cmd *cobra.Command, args []string) error { return err } - baseRepo, err := determineBaseRepo(apiClient, cmd, ctx) - if err != nil { - return err - } - web, err := cmd.Flags().GetBool("web") if err != nil { return err } - pr, err := prFromArgs(ctx, apiClient, baseRepo, args) + pr, _, err := prFromArgs(ctx, apiClient, cmd, args) if err != nil { return err } @@ -337,12 +332,7 @@ func prClose(cmd *cobra.Command, args []string) error { return err } - baseRepo, err := determineBaseRepo(apiClient, cmd, ctx) - if err != nil { - return err - } - - pr, err := prFromArgs(ctx, apiClient, baseRepo, args) + pr, baseRepo, err := prFromArgs(ctx, apiClient, cmd, args) if err != nil { return err } @@ -372,12 +362,7 @@ func prReopen(cmd *cobra.Command, args []string) error { return err } - baseRepo, err := determineBaseRepo(apiClient, cmd, ctx) - if err != nil { - return err - } - - pr, err := prFromArgs(ctx, apiClient, baseRepo, args) + pr, baseRepo, err := prFromArgs(ctx, apiClient, cmd, args) if err != nil { return err } @@ -409,12 +394,7 @@ func prMerge(cmd *cobra.Command, args []string) error { return err } - baseRepo, err := determineBaseRepo(apiClient, cmd, ctx) - if err != nil { - return err - } - - pr, err := prFromArgs(ctx, apiClient, baseRepo, args) + pr, baseRepo, err := prFromArgs(ctx, apiClient, cmd, args) if err != nil { return err } @@ -652,12 +632,7 @@ func prReady(cmd *cobra.Command, args []string) error { return err } - baseRepo, err := determineBaseRepo(apiClient, cmd, ctx) - if err != nil { - return err - } - - pr, err := prFromArgs(ctx, apiClient, baseRepo, args) + pr, baseRepo, err := prFromArgs(ctx, apiClient, cmd, args) if err != nil { return err } diff --git a/command/pr_checkout.go b/command/pr_checkout.go index 757df0fd5..8ffa39210 100644 --- a/command/pr_checkout.go +++ b/command/pr_checkout.go @@ -5,7 +5,6 @@ import ( "fmt" "os" "os/exec" - "regexp" "github.com/spf13/cobra" @@ -27,22 +26,7 @@ func prCheckout(cmd *cobra.Command, args []string) error { return err } - var baseRepo ghrepo.Interface - prString := args[0] - r := regexp.MustCompile(`^https://github\.com/([^/]+)/([^/]+)/pull/(\d+)`) - if m := r.FindStringSubmatch(prString); m != nil { - prString = m[3] - baseRepo = ghrepo.New(m[1], m[2]) - } - - if baseRepo == nil { - baseRepo, err = determineBaseRepo(apiClient, cmd, ctx) - if err != nil { - return err - } - } - - pr, err := prFromArgs(ctx, apiClient, baseRepo, []string{prString}) + pr, baseRepo, err := prFromArgs(ctx, apiClient, cmd, args) if err != nil { return err } @@ -61,6 +45,7 @@ func prCheckout(cmd *cobra.Command, args []string) error { var cmdQueue [][]string newBranchName := pr.HeadRefName + if headRemote != nil { // there is an existing git remote for PR head remoteBranch := fmt.Sprintf("%s/%s", headRemote.Name, pr.HeadRefName) diff --git a/command/pr_checkout_test.go b/command/pr_checkout_test.go index 851d6ed22..501af2447 100644 --- a/command/pr_checkout_test.go +++ b/command/pr_checkout_test.go @@ -76,6 +76,7 @@ func TestPRCheckout_urlArg(t *testing.T) { return ctx } http := initFakeHTTP() + http.StubRepoResponse("hubot", "REPO") http.StubResponse(200, bytes.NewBufferString(` { "data": { "repository": { "pullRequest": { @@ -125,7 +126,7 @@ func TestPRCheckout_urlArg_differentBase(t *testing.T) { return ctx } http := initFakeHTTP() - + http.StubRepoResponse("OWNER", "REPO") http.StubResponse(200, bytes.NewBufferString(` { "data": { "repository": { "pullRequest": { "number": 123, @@ -160,7 +161,7 @@ func TestPRCheckout_urlArg_differentBase(t *testing.T) { eq(t, err, nil) eq(t, output.String(), "") - bodyBytes, _ := ioutil.ReadAll(http.Requests[0].Body) + bodyBytes, _ := ioutil.ReadAll(http.Requests[1].Body) reqBody := struct { Variables struct { Owner string diff --git a/command/pr_diff.go b/command/pr_diff.go index 1f89d59cb..ae50a2618 100644 --- a/command/pr_diff.go +++ b/command/pr_diff.go @@ -36,17 +36,12 @@ func prDiff(cmd *cobra.Command, args []string) error { return err } - baseRepo, err := determineBaseRepo(apiClient, cmd, ctx) - if err != nil { - return fmt.Errorf("could not determine base repo: %w", err) - } - - pr, err := prFromArgs(ctx, apiClient, baseRepo, args) + pr, baseRepo, err := prFromArgs(ctx, apiClient, cmd, args) if err != nil { return fmt.Errorf("could not find pull request: %w", err) } - diff, err := apiClient.PullRequestDiff(baseRepo, pr) + diff, err := apiClient.PullRequestDiff(baseRepo, pr.Number) if err != nil { return fmt.Errorf("could not find pull request diff: %w", err) } diff --git a/command/pr_lookup.go b/command/pr_lookup.go index a5e380b47..7f9a86955 100644 --- a/command/pr_lookup.go +++ b/command/pr_lookup.go @@ -10,28 +10,36 @@ import ( "github.com/cli/cli/context" "github.com/cli/cli/git" "github.com/cli/cli/internal/ghrepo" + "github.com/spf13/cobra" ) -func prFromArgs(ctx context.Context, apiClient *api.Client, repo ghrepo.Interface, args []string) (*api.PullRequest, error) { - if len(args) == 0 { - return prForCurrentBranch(ctx, apiClient, repo) +func prFromArgs(ctx context.Context, apiClient *api.Client, cmd *cobra.Command, args []string) (*api.PullRequest, ghrepo.Interface, error) { + repo, err := determineBaseRepo(apiClient, cmd, ctx) + if err != nil { + return nil, nil, fmt.Errorf("could not determine base repo: %w", err) } - // First check to see if the prString is a url + if len(args) == 0 { + pr, err := prForCurrentBranch(ctx, apiClient, repo) + return pr, repo, err + } + + // First check to see if the prString is a url, return repo from url if found prString := args[0] - pr, err := prFromURL(ctx, apiClient, repo, prString) + pr, r, err := prFromURL(ctx, apiClient, prString) if pr != nil || err != nil { - return pr, err + return pr, r, err } // Next see if the prString is a number and use that to look up the url pr, err = prFromNumberString(ctx, apiClient, repo, prString) if pr != nil || err != nil { - return pr, err + return pr, repo, err } // Last see if it is a branch name - return api.PullRequestForBranch(apiClient, repo, "", prString) + pr, err = api.PullRequestForBranch(apiClient, repo, "", prString) + return pr, repo, err } func prFromNumberString(ctx context.Context, apiClient *api.Client, repo ghrepo.Interface, s string) (*api.PullRequest, error) { @@ -42,14 +50,16 @@ func prFromNumberString(ctx context.Context, apiClient *api.Client, repo ghrepo. return nil, nil } -func prFromURL(ctx context.Context, apiClient *api.Client, repo ghrepo.Interface, s string) (*api.PullRequest, error) { +func prFromURL(ctx context.Context, apiClient *api.Client, s string) (*api.PullRequest, ghrepo.Interface, error) { r := regexp.MustCompile(`^https://github\.com/([^/]+)/([^/]+)/pull/(\d+)`) if m := r.FindStringSubmatch(s); m != nil { + repo := ghrepo.New(m[1], m[2]) prNumberString := m[3] - return prFromNumberString(ctx, apiClient, repo, prNumberString) + pr, err := prFromNumberString(ctx, apiClient, repo, prNumberString) + return pr, repo, err } - return nil, nil + return nil, nil, nil } func prForCurrentBranch(ctx context.Context, apiClient *api.Client, repo ghrepo.Interface) (*api.PullRequest, error) { diff --git a/command/pr_review.go b/command/pr_review.go index b0a1f2062..c48790b6a 100644 --- a/command/pr_review.go +++ b/command/pr_review.go @@ -89,12 +89,7 @@ func prReview(cmd *cobra.Command, args []string) error { return err } - baseRepo, err := determineBaseRepo(apiClient, cmd, ctx) - if err != nil { - return fmt.Errorf("could not determine base repo: %w", err) - } - - pr, err := prFromArgs(ctx, apiClient, baseRepo, args) + pr, _, err := prFromArgs(ctx, apiClient, cmd, args) if err != nil { return err } From f490a4914f5fad55fde647352aab2a9e2d04ec43 Mon Sep 17 00:00:00 2001 From: Corey Johnson Date: Thu, 4 Jun 2020 10:30:41 -0700 Subject: [PATCH 10/10] Don't need extra determineBaseRepo call --- command/pr_checkout_test.go | 5 +---- command/pr_lookup.go | 35 ++++++++++++++++++++--------------- command/pr_review_test.go | 3 +-- command/pr_test.go | 2 -- 4 files changed, 22 insertions(+), 23 deletions(-) diff --git a/command/pr_checkout_test.go b/command/pr_checkout_test.go index 501af2447..16b7429be 100644 --- a/command/pr_checkout_test.go +++ b/command/pr_checkout_test.go @@ -76,8 +76,6 @@ func TestPRCheckout_urlArg(t *testing.T) { return ctx } http := initFakeHTTP() - http.StubRepoResponse("hubot", "REPO") - http.StubResponse(200, bytes.NewBufferString(` { "data": { "repository": { "pullRequest": { "number": 123, @@ -126,7 +124,6 @@ func TestPRCheckout_urlArg_differentBase(t *testing.T) { return ctx } http := initFakeHTTP() - http.StubRepoResponse("OWNER", "REPO") http.StubResponse(200, bytes.NewBufferString(` { "data": { "repository": { "pullRequest": { "number": 123, @@ -161,7 +158,7 @@ func TestPRCheckout_urlArg_differentBase(t *testing.T) { eq(t, err, nil) eq(t, output.String(), "") - bodyBytes, _ := ioutil.ReadAll(http.Requests[1].Body) + bodyBytes, _ := ioutil.ReadAll(http.Requests[0].Body) reqBody := struct { Variables struct { Owner string diff --git a/command/pr_lookup.go b/command/pr_lookup.go index 7f9a86955..a1b0c9638 100644 --- a/command/pr_lookup.go +++ b/command/pr_lookup.go @@ -14,32 +14,37 @@ import ( ) func prFromArgs(ctx context.Context, apiClient *api.Client, cmd *cobra.Command, args []string) (*api.PullRequest, ghrepo.Interface, error) { + if len(args) == 1 { + // First check to see if the prString is a url, return repo from url if found. This + // is run first because we don't need to run determineBaseRepo for this path + prString := args[0] + pr, r, err := prFromURL(ctx, apiClient, prString) + if pr != nil || err != nil { + return pr, r, err + } + } + repo, err := determineBaseRepo(apiClient, cmd, ctx) if err != nil { return nil, nil, fmt.Errorf("could not determine base repo: %w", err) } + // If there are no args see if we can guess the PR from the current branch if len(args) == 0 { pr, err := prForCurrentBranch(ctx, apiClient, repo) return pr, repo, err - } + } else { + prString := args[0] + // Next see if the prString is a number and use that to look up the url + pr, err := prFromNumberString(ctx, apiClient, repo, prString) + if pr != nil || err != nil { + return pr, repo, err + } - // First check to see if the prString is a url, return repo from url if found - prString := args[0] - pr, r, err := prFromURL(ctx, apiClient, prString) - if pr != nil || err != nil { - return pr, r, err - } - - // Next see if the prString is a number and use that to look up the url - pr, err = prFromNumberString(ctx, apiClient, repo, prString) - if pr != nil || err != nil { + // Last see if it is a branch name + pr, err = api.PullRequestForBranch(apiClient, repo, "", prString) return pr, repo, err } - - // Last see if it is a branch name - pr, err = api.PullRequestForBranch(apiClient, repo, "", prString) - return pr, repo, err } func prFromNumberString(ctx context.Context, apiClient *api.Client, repo ghrepo.Interface, s string) (*api.PullRequest, error) { diff --git a/command/pr_review_test.go b/command/pr_review_test.go index e2c54e715..612f6c574 100644 --- a/command/pr_review_test.go +++ b/command/pr_review_test.go @@ -50,7 +50,6 @@ func TestPRReview_bad_body(t *testing.T) { func TestPRReview_url_arg(t *testing.T) { initBlankContext("", "OWNER/REPO", "master") http := initFakeHTTP() - http.StubRepoResponse("OWNER", "REPO") http.StubResponse(200, bytes.NewBufferString(` { "data": { "repository": { "pullRequest": { "id": "foobar123", @@ -77,7 +76,7 @@ func TestPRReview_url_arg(t *testing.T) { test.ExpectLines(t, output.String(), "Approved pull request #123") - bodyBytes, _ := ioutil.ReadAll(http.Requests[2].Body) + bodyBytes, _ := ioutil.ReadAll(http.Requests[1].Body) reqBody := struct { Variables struct { Input struct { diff --git a/command/pr_test.go b/command/pr_test.go index ef483c7d2..a11c60820 100644 --- a/command/pr_test.go +++ b/command/pr_test.go @@ -722,8 +722,6 @@ func TestPRView_web_numberArgWithHash(t *testing.T) { func TestPRView_web_urlArg(t *testing.T) { initBlankContext("", "OWNER/REPO", "master") http := initFakeHTTP() - - http.StubRepoResponse("OWNER", "REPO") http.StubResponse(200, bytes.NewBufferString(` { "data": { "repository": { "pullRequest": { "url": "https://github.com/OWNER/REPO/pull/23"