From 0a496317a51480146e414cf98a345a52f08e986e Mon Sep 17 00:00:00 2001 From: bchadwic Date: Mon, 5 Jul 2021 14:57:44 -0700 Subject: [PATCH 1/5] added in the ability to view repository by commit hashes --- pkg/cmd/browse/browse.go | 15 +++++++++------ pkg/cmd/browse/browse_test.go | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 6 deletions(-) diff --git a/pkg/cmd/browse/browse.go b/pkg/cmd/browse/browse.go index 6487d1944..c19fbf6f5 100644 --- a/pkg/cmd/browse/browse.go +++ b/pkg/cmd/browse/browse.go @@ -27,6 +27,7 @@ type BrowseOptions struct { SelectorArg string Branch string + SHA string ProjectsFlag bool SettingsFlag bool WikiFlag bool @@ -102,6 +103,7 @@ func NewCmdBrowse(f *cmdutil.Factory, runF func(*BrowseOptions) error) *cobra.Co cmd.Flags().BoolVarP(&opts.SettingsFlag, "settings", "s", false, "Open repository settings") cmd.Flags().BoolVarP(&opts.NoBrowserFlag, "no-browser", "n", false, "Print destination URL instead of opening the browser") cmd.Flags().StringVarP(&opts.Branch, "branch", "b", "", "Select another branch by passing in the branch name") + cmd.Flags().StringVarP(&opts.SHA, "sha", "a", "", "Select a commit by passing in the SHA hash") return cmd } @@ -121,15 +123,14 @@ func runBrowse(opts *BrowseOptions) error { if opts.SelectorArg == "" { if opts.ProjectsFlag { url += "/projects" - } - if opts.SettingsFlag { + } else if opts.SettingsFlag { url += "/settings" - } - if opts.WikiFlag { + } else if opts.WikiFlag { url += "/wiki" - } - if opts.Branch != "" { + } else if opts.Branch != "" { url += "/tree/" + opts.Branch + "/" + } else if opts.SHA != "" { + url += "/tree/" + opts.SHA + "/" } } else { if isNumber(opts.SelectorArg) { @@ -141,6 +142,8 @@ func runBrowse(opts *BrowseOptions) error { } if opts.Branch != "" { url += "/tree/" + opts.Branch + "/" + } else if opts.SHA != "" { + url += "/tree/" + opts.SHA + "/" } else { apiClient := api.NewClientFromHTTP(httpClient) branchName, err := api.RepoDefaultBranch(apiClient, baseRepo) diff --git a/pkg/cmd/browse/browse_test.go b/pkg/cmd/browse/browse_test.go index d30a95024..496205bea 100644 --- a/pkg/cmd/browse/browse_test.go +++ b/pkg/cmd/browse/browse_test.go @@ -58,6 +58,19 @@ func TestNewCmdBrowse(t *testing.T) { }, wantsErr: false, }, + { + name: "SHA flag", + cli: "--sha e32e640", + wants: BrowseOptions{ + SHA: "e32e640", + }, + wantsErr: false, + }, + { + name: "SHA flag no arg", + cli: "-a", + wantsErr: true, + }, { name: "branch flag", cli: "--branch main", @@ -254,6 +267,25 @@ func Test_runBrowse(t *testing.T) { wantsErr: false, expectedURL: "https://github.com/mislav/will_paginate/tree/3-0-stable/init.rb#L6", }, + { + name: "opening browser with SHA hash no args", + opts: BrowseOptions{ + SHA: "162a1b2", + }, + baseRepo: ghrepo.New("torvalds", "linux"), + wantsErr: false, + expectedURL: "https://github.com/torvalds/linux/tree/162a1b2/", + }, + { + name: "opening browser with SHA hash file arg", + opts: BrowseOptions{ + SHA: "162a1b2", + SelectorArg: "api/cache.go:32", + }, + baseRepo: ghrepo.New("cli", "cli"), + wantsErr: false, + expectedURL: "https://github.com/cli/cli/tree/162a1b2/api/cache.go#L32", + }, } for _, tt := range tests { From 158a15160df77eb1419ea0dc29ecbc7cbbe14fb2 Mon Sep 17 00:00:00 2001 From: bchadwic Date: Wed, 14 Jul 2021 01:19:55 -0700 Subject: [PATCH 2/5] Changed name from SHA to Commit --- pkg/cmd/browse/browse.go | 15 ++++++++------- pkg/cmd/browse/browse_test.go | 23 ++++++++++++++--------- 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/pkg/cmd/browse/browse.go b/pkg/cmd/browse/browse.go index 1c532f856..42b7a1b44 100644 --- a/pkg/cmd/browse/browse.go +++ b/pkg/cmd/browse/browse.go @@ -27,7 +27,7 @@ type BrowseOptions struct { SelectorArg string Branch string - SHA string + Commit string ProjectsFlag bool SettingsFlag bool WikiFlag bool @@ -81,8 +81,9 @@ func NewCmdBrowse(f *cmdutil.Factory, runF func(*BrowseOptions) error) *cobra.Co } if err := cmdutil.MutuallyExclusive( - "specify only one of `--branch`, `--projects`, `--wiki`, or `--settings`", + "specify only one of `--branch`, `--commit`, `--projects`, `--wiki`, or `--settings`", opts.Branch != "", + opts.Commit != "", opts.WikiFlag, opts.SettingsFlag, opts.ProjectsFlag, @@ -103,7 +104,7 @@ func NewCmdBrowse(f *cmdutil.Factory, runF func(*BrowseOptions) error) *cobra.Co cmd.Flags().BoolVarP(&opts.SettingsFlag, "settings", "s", false, "Open repository settings") cmd.Flags().BoolVarP(&opts.NoBrowserFlag, "no-browser", "n", false, "Print destination URL instead of opening the browser") cmd.Flags().StringVarP(&opts.Branch, "branch", "b", "", "Select another branch by passing in the branch name") - cmd.Flags().StringVarP(&opts.SHA, "sha", "a", "", "Select a commit by passing in the SHA hash") + cmd.Flags().StringVarP(&opts.Commit, "commit", "c", "", "Select a commit by passing in the SHA hash") return cmd } @@ -129,8 +130,8 @@ func runBrowse(opts *BrowseOptions) error { url += "/wiki" } else if opts.Branch != "" { url += "/tree/" + opts.Branch + "/" - } else if opts.SHA != "" { - url += "/tree/" + opts.SHA + "/" + } else if opts.Commit != "" { + url += "/tree/" + opts.Commit + "/" } } else { if isNumber(opts.SelectorArg) { @@ -142,8 +143,8 @@ func runBrowse(opts *BrowseOptions) error { } if opts.Branch != "" { url += "/tree/" + opts.Branch + "/" - } else if opts.SHA != "" { - url += "/tree/" + opts.SHA + "/" + } else if opts.Commit != "" { + url += "/tree/" + opts.Commit + "/" } else { apiClient := api.NewClientFromHTTP(httpClient) branchName, err := api.RepoDefaultBranch(apiClient, baseRepo) diff --git a/pkg/cmd/browse/browse_test.go b/pkg/cmd/browse/browse_test.go index 496205bea..fb292f622 100644 --- a/pkg/cmd/browse/browse_test.go +++ b/pkg/cmd/browse/browse_test.go @@ -59,16 +59,21 @@ func TestNewCmdBrowse(t *testing.T) { wantsErr: false, }, { - name: "SHA flag", - cli: "--sha e32e640", + name: "Commit flag", + cli: "--commit e32e640", wants: BrowseOptions{ - SHA: "e32e640", + Commit: "e32e640", }, wantsErr: false, }, { - name: "SHA flag no arg", - cli: "-a", + name: "Commit flag no arg", + cli: "-c", + wantsErr: true, + }, + { + name: "Multi flags", + cli: "-c 1a2b3c -b trunk", wantsErr: true, }, { @@ -268,18 +273,18 @@ func Test_runBrowse(t *testing.T) { expectedURL: "https://github.com/mislav/will_paginate/tree/3-0-stable/init.rb#L6", }, { - name: "opening browser with SHA hash no args", + name: "opening browser with Commit hash no args", opts: BrowseOptions{ - SHA: "162a1b2", + Commit: "162a1b2", }, baseRepo: ghrepo.New("torvalds", "linux"), wantsErr: false, expectedURL: "https://github.com/torvalds/linux/tree/162a1b2/", }, { - name: "opening browser with SHA hash file arg", + name: "opening browser with commit hash file arg", opts: BrowseOptions{ - SHA: "162a1b2", + Commit: "162a1b2", SelectorArg: "api/cache.go:32", }, baseRepo: ghrepo.New("cli", "cli"), From 8962aeebf963a09beca9fedb32de36ca09091305 Mon Sep 17 00:00:00 2001 From: bchadwic Date: Wed, 21 Jul 2021 01:08:15 -0700 Subject: [PATCH 3/5] changed functionality to open up last commit with -c / --commit for gh browse --- pkg/cmd/browse/browse.go | 21 +++++++------ pkg/cmd/browse/browse_test.go | 55 ++++++++++++++++++----------------- 2 files changed, 40 insertions(+), 36 deletions(-) diff --git a/pkg/cmd/browse/browse.go b/pkg/cmd/browse/browse.go index 42b7a1b44..debe784a6 100644 --- a/pkg/cmd/browse/browse.go +++ b/pkg/cmd/browse/browse.go @@ -8,6 +8,7 @@ import ( "github.com/MakeNowJust/heredoc" "github.com/cli/cli/api" + "github.com/cli/cli/git" "github.com/cli/cli/internal/ghrepo" "github.com/cli/cli/pkg/cmdutil" "github.com/cli/cli/pkg/iostreams" @@ -27,7 +28,7 @@ type BrowseOptions struct { SelectorArg string Branch string - Commit string + CommitFlag bool ProjectsFlag bool SettingsFlag bool WikiFlag bool @@ -46,7 +47,7 @@ func NewCmdBrowse(f *cmdutil.Factory, runF func(*BrowseOptions) error) *cobra.Co Short: "Open the repository in the browser", Use: "browse [ | ]", Args: cobra.MaximumNArgs(1), - Example: heredoc.Doc(` + Example: heredoc.Doc(` $ gh browse #=> Open the home page of the current repository @@ -83,7 +84,7 @@ func NewCmdBrowse(f *cmdutil.Factory, runF func(*BrowseOptions) error) *cobra.Co if err := cmdutil.MutuallyExclusive( "specify only one of `--branch`, `--commit`, `--projects`, `--wiki`, or `--settings`", opts.Branch != "", - opts.Commit != "", + opts.CommitFlag, opts.WikiFlag, opts.SettingsFlag, opts.ProjectsFlag, @@ -103,8 +104,8 @@ func NewCmdBrowse(f *cmdutil.Factory, runF func(*BrowseOptions) error) *cobra.Co cmd.Flags().BoolVarP(&opts.WikiFlag, "wiki", "w", false, "Open repository wiki") cmd.Flags().BoolVarP(&opts.SettingsFlag, "settings", "s", false, "Open repository settings") cmd.Flags().BoolVarP(&opts.NoBrowserFlag, "no-browser", "n", false, "Print destination URL instead of opening the browser") + cmd.Flags().BoolVarP(&opts.CommitFlag, "commit", "c", false, "Open the last commit") cmd.Flags().StringVarP(&opts.Branch, "branch", "b", "", "Select another branch by passing in the branch name") - cmd.Flags().StringVarP(&opts.Commit, "commit", "c", "", "Select a commit by passing in the SHA hash") return cmd } @@ -130,8 +131,9 @@ func runBrowse(opts *BrowseOptions) error { url += "/wiki" } else if opts.Branch != "" { url += "/tree/" + opts.Branch + "/" - } else if opts.Commit != "" { - url += "/tree/" + opts.Commit + "/" + } else if opts.CommitFlag { + commit, _ := git.LastCommit() + url += "/tree/" + commit.Sha + "/" } } else { if isNumber(opts.SelectorArg) { @@ -141,10 +143,11 @@ func runBrowse(opts *BrowseOptions) error { if err != nil { return err } - if opts.Branch != "" { + if opts.CommitFlag { + commit, _ := git.LastCommit() + url += "/tree/" + commit.Sha + "/" + } else if opts.Branch != "" { url += "/tree/" + opts.Branch + "/" - } else if opts.Commit != "" { - url += "/tree/" + opts.Commit + "/" } else { apiClient := api.NewClientFromHTTP(httpClient) branchName, err := api.RepoDefaultBranch(apiClient, baseRepo) diff --git a/pkg/cmd/browse/browse_test.go b/pkg/cmd/browse/browse_test.go index fb292f622..67a1ebd2b 100644 --- a/pkg/cmd/browse/browse_test.go +++ b/pkg/cmd/browse/browse_test.go @@ -3,6 +3,7 @@ package browse import ( "fmt" "net/http" + "os" "testing" "github.com/cli/cli/internal/ghrepo" @@ -58,24 +59,6 @@ func TestNewCmdBrowse(t *testing.T) { }, wantsErr: false, }, - { - name: "Commit flag", - cli: "--commit e32e640", - wants: BrowseOptions{ - Commit: "e32e640", - }, - wantsErr: false, - }, - { - name: "Commit flag no arg", - cli: "-c", - wantsErr: true, - }, - { - name: "Multi flags", - cli: "-c 1a2b3c -b trunk", - wantsErr: true, - }, { name: "branch flag", cli: "--branch main", @@ -120,6 +103,14 @@ func TestNewCmdBrowse(t *testing.T) { cli: "main.go main.go", wantsErr: true, }, + { + name: "last commit flag", + cli: "-c", + wants: BrowseOptions{ + CommitFlag: true, + }, + wantsErr: false, + }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { @@ -151,7 +142,17 @@ func TestNewCmdBrowse(t *testing.T) { } } +func setGitDir(t *testing.T, dir string) { + // taken from git_test.go + old_GIT_DIR := os.Getenv("GIT_DIR") + os.Setenv("GIT_DIR", dir) + t.Cleanup(func() { + os.Setenv("GIT_DIR", old_GIT_DIR) + }) +} + func Test_runBrowse(t *testing.T) { + setGitDir(t, "../../../git/fixtures/simple.git") tests := []struct { name string opts BrowseOptions @@ -273,23 +274,23 @@ func Test_runBrowse(t *testing.T) { expectedURL: "https://github.com/mislav/will_paginate/tree/3-0-stable/init.rb#L6", }, { - name: "opening browser with Commit hash no args", + name: "open last commit", opts: BrowseOptions{ - Commit: "162a1b2", + CommitFlag: true, }, - baseRepo: ghrepo.New("torvalds", "linux"), + baseRepo: ghrepo.New("vilmibm", "gh-user-status"), wantsErr: false, - expectedURL: "https://github.com/torvalds/linux/tree/162a1b2/", + expectedURL: "https://github.com/vilmibm/gh-user-status/tree/6f1a2405cace1633d89a79c74c65f22fe78f9659/", }, { - name: "opening browser with commit hash file arg", + name: "open last commit with a file", opts: BrowseOptions{ - Commit: "162a1b2", - SelectorArg: "api/cache.go:32", + CommitFlag: true, + SelectorArg: "main.go", }, - baseRepo: ghrepo.New("cli", "cli"), + baseRepo: ghrepo.New("vilmibm", "gh-user-status"), wantsErr: false, - expectedURL: "https://github.com/cli/cli/tree/162a1b2/api/cache.go#L32", + expectedURL: "https://github.com/vilmibm/gh-user-status/tree/6f1a2405cace1633d89a79c74c65f22fe78f9659/main.go", }, } From 285f8659b3e5ba990f5d5133afed255b670ad656 Mon Sep 17 00:00:00 2001 From: bchadwic Date: Wed, 21 Jul 2021 01:11:38 -0700 Subject: [PATCH 4/5] clean up --- pkg/cmd/browse/browse.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/cmd/browse/browse.go b/pkg/cmd/browse/browse.go index debe784a6..f0d89441c 100644 --- a/pkg/cmd/browse/browse.go +++ b/pkg/cmd/browse/browse.go @@ -47,7 +47,7 @@ func NewCmdBrowse(f *cmdutil.Factory, runF func(*BrowseOptions) error) *cobra.Co Short: "Open the repository in the browser", Use: "browse [ | ]", Args: cobra.MaximumNArgs(1), - Example: heredoc.Doc(` + Example: heredoc.Doc(` $ gh browse #=> Open the home page of the current repository From 5bdaab882b77e2c870a50d208284dc5c374108c1 Mon Sep 17 00:00:00 2001 From: nate smith Date: Thu, 14 Oct 2021 11:25:33 -0500 Subject: [PATCH 5/5] fix --- pkg/cmd/browse/browse.go | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/pkg/cmd/browse/browse.go b/pkg/cmd/browse/browse.go index b4d723950..16d793979 100644 --- a/pkg/cmd/browse/browse.go +++ b/pkg/cmd/browse/browse.go @@ -93,13 +93,6 @@ func NewCmdBrowse(f *cmdutil.Factory, runF func(*BrowseOptions) error) *cobra.Co return err } - if opts.CommitFlag { - commit, err := git.LastCommit() - if err != nil { - opts.Branch = commit.Sha - } - } - if runF != nil { return runF(opts) } @@ -124,6 +117,13 @@ func runBrowse(opts *BrowseOptions) error { return fmt.Errorf("unable to determine base repository: %w", err) } + if opts.CommitFlag { + commit, err := git.LastCommit() + if err == nil { + opts.Branch = commit.Sha + } + } + section, err := parseSection(baseRepo, opts) if err != nil { return err