diff --git a/pkg/cmd/browse/browse.go b/pkg/cmd/browse/browse.go index e7b998e81..6487d1944 100644 --- a/pkg/cmd/browse/browse.go +++ b/pkg/cmd/browse/browse.go @@ -26,10 +26,11 @@ type BrowseOptions struct { SelectorArg string - Branch string - ProjectsFlag bool - SettingsFlag bool - WikiFlag bool + Branch string + ProjectsFlag bool + SettingsFlag bool + WikiFlag bool + NoBrowserFlag bool } func NewCmdBrowse(f *cmdutil.Factory, runF func(*BrowseOptions) error) *cobra.Command { @@ -99,6 +100,7 @@ func NewCmdBrowse(f *cmdutil.Factory, runF func(*BrowseOptions) error) *cobra.Co cmd.Flags().BoolVarP(&opts.ProjectsFlag, "projects", "p", false, "Open repository projects") 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().StringVarP(&opts.Branch, "branch", "b", "", "Select another branch by passing in the branch name") return cmd @@ -151,10 +153,15 @@ func runBrowse(opts *BrowseOptions) error { } } - if opts.IO.IsStdoutTTY() { - fmt.Fprintf(opts.IO.Out, "now opening %s in browser\n", url) + if opts.NoBrowserFlag { + _, err := fmt.Fprintf(opts.IO.Out, "%s\n", url) + return err + } else { + if opts.IO.IsStdoutTTY() { + fmt.Fprintf(opts.IO.Out, "now opening %s in browser\n", url) + } + return opts.Browser.Browse(url) } - return opts.Browser.Browse(url) } func parseFileArg(fileArg string) (string, error) { diff --git a/pkg/cmd/browse/browse_test.go b/pkg/cmd/browse/browse_test.go index aff46a1ad..d30a95024 100644 --- a/pkg/cmd/browse/browse_test.go +++ b/pkg/cmd/browse/browse_test.go @@ -1,6 +1,7 @@ package browse import ( + "fmt" "net/http" "testing" @@ -49,6 +50,14 @@ func TestNewCmdBrowse(t *testing.T) { }, wantsErr: false, }, + { + name: "no browser flag", + cli: "--no-browser", + wants: BrowseOptions{ + NoBrowserFlag: true, + }, + wantsErr: false, + }, { name: "branch flag", cli: "--branch main", @@ -118,6 +127,7 @@ func TestNewCmdBrowse(t *testing.T) { assert.Equal(t, tt.wants.SelectorArg, opts.SelectorArg) assert.Equal(t, tt.wants.ProjectsFlag, opts.ProjectsFlag) assert.Equal(t, tt.wants.WikiFlag, opts.WikiFlag) + assert.Equal(t, tt.wants.NoBrowserFlag, opts.NoBrowserFlag) assert.Equal(t, tt.wants.SettingsFlag, opts.SettingsFlag) }) } @@ -233,6 +243,17 @@ func Test_runBrowse(t *testing.T) { wantsErr: false, expectedURL: "https://github.com/github/ThankYouGitHub/tree/first-browse-pull/browse.go#L32", }, + { + name: "no browser with branch file and line number", + opts: BrowseOptions{ + Branch: "3-0-stable", + SelectorArg: "init.rb:6", + NoBrowserFlag: true, + }, + baseRepo: ghrepo.New("mislav", "will_paginate"), + wantsErr: false, + expectedURL: "https://github.com/mislav/will_paginate/tree/3-0-stable/init.rb#L6", + }, } for _, tt := range tests { @@ -263,9 +284,15 @@ func Test_runBrowse(t *testing.T) { assert.NoError(t, err) } - assert.Equal(t, "", stdout.String()) - assert.Equal(t, "", stderr.String()) - browser.Verify(t, tt.expectedURL) + if opts.NoBrowserFlag { + assert.Equal(t, fmt.Sprintf("%s\n", tt.expectedURL), stdout.String()) + assert.Equal(t, "", stderr.String()) + browser.Verify(t, "") + } else { + assert.Equal(t, "", stdout.String()) + assert.Equal(t, "", stderr.String()) + browser.Verify(t, tt.expectedURL) + } }) } }