Skip to content

Commit 49ff0c6

Browse files
committed
Add a no-browser mode to gh browse
For when you just want the destination URL on stdout.
1 parent a6710ec commit 49ff0c6

File tree

2 files changed

+44
-10
lines changed

2 files changed

+44
-10
lines changed

pkg/cmd/browse/browse.go

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,11 @@ type BrowseOptions struct {
2626

2727
SelectorArg string
2828

29-
Branch string
30-
ProjectsFlag bool
31-
SettingsFlag bool
32-
WikiFlag bool
29+
Branch string
30+
ProjectsFlag bool
31+
SettingsFlag bool
32+
WikiFlag bool
33+
NoBrowserFlag bool
3334
}
3435

3536
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
99100
cmd.Flags().BoolVarP(&opts.ProjectsFlag, "projects", "p", false, "Open repository projects")
100101
cmd.Flags().BoolVarP(&opts.WikiFlag, "wiki", "w", false, "Open repository wiki")
101102
cmd.Flags().BoolVarP(&opts.SettingsFlag, "settings", "s", false, "Open repository settings")
103+
cmd.Flags().BoolVarP(&opts.NoBrowserFlag, "no-browser", "n", false, "Print destination URL instead of opening the browser")
102104
cmd.Flags().StringVarP(&opts.Branch, "branch", "b", "", "Select another branch by passing in the branch name")
103105

104106
return cmd
@@ -151,10 +153,15 @@ func runBrowse(opts *BrowseOptions) error {
151153
}
152154
}
153155

154-
if opts.IO.IsStdoutTTY() {
155-
fmt.Fprintf(opts.IO.Out, "now opening %s in browser\n", url)
156+
if opts.NoBrowserFlag {
157+
_, err := fmt.Fprintf(opts.IO.Out, "%s\n", url)
158+
return err
159+
} else {
160+
if opts.IO.IsStdoutTTY() {
161+
fmt.Fprintf(opts.IO.Out, "now opening %s in browser\n", url)
162+
}
163+
return opts.Browser.Browse(url)
156164
}
157-
return opts.Browser.Browse(url)
158165
}
159166

160167
func parseFileArg(fileArg string) (string, error) {

pkg/cmd/browse/browse_test.go

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package browse
22

33
import (
4+
"fmt"
45
"net/http"
56
"testing"
67

@@ -49,6 +50,14 @@ func TestNewCmdBrowse(t *testing.T) {
4950
},
5051
wantsErr: false,
5152
},
53+
{
54+
name: "no browser flag",
55+
cli: "--no-browser",
56+
wants: BrowseOptions{
57+
NoBrowserFlag: true,
58+
},
59+
wantsErr: false,
60+
},
5261
{
5362
name: "branch flag",
5463
cli: "--branch main",
@@ -118,6 +127,7 @@ func TestNewCmdBrowse(t *testing.T) {
118127
assert.Equal(t, tt.wants.SelectorArg, opts.SelectorArg)
119128
assert.Equal(t, tt.wants.ProjectsFlag, opts.ProjectsFlag)
120129
assert.Equal(t, tt.wants.WikiFlag, opts.WikiFlag)
130+
assert.Equal(t, tt.wants.NoBrowserFlag, opts.NoBrowserFlag)
121131
assert.Equal(t, tt.wants.SettingsFlag, opts.SettingsFlag)
122132
})
123133
}
@@ -233,6 +243,17 @@ func Test_runBrowse(t *testing.T) {
233243
wantsErr: false,
234244
expectedURL: "https://github.com/github/ThankYouGitHub/tree/first-browse-pull/browse.go#L32",
235245
},
246+
{
247+
name: "no browser with branch file and line number",
248+
opts: BrowseOptions{
249+
Branch: "3-0-stable",
250+
SelectorArg: "init.rb:6",
251+
NoBrowserFlag: true,
252+
},
253+
baseRepo: ghrepo.New("mislav", "will_paginate"),
254+
wantsErr: false,
255+
expectedURL: "https://github.com/mislav/will_paginate/tree/3-0-stable/init.rb#L6",
256+
},
236257
}
237258

238259
for _, tt := range tests {
@@ -263,9 +284,15 @@ func Test_runBrowse(t *testing.T) {
263284
assert.NoError(t, err)
264285
}
265286

266-
assert.Equal(t, "", stdout.String())
267-
assert.Equal(t, "", stderr.String())
268-
browser.Verify(t, tt.expectedURL)
287+
if opts.NoBrowserFlag {
288+
assert.Equal(t, fmt.Sprintf("%s\n", tt.expectedURL), stdout.String())
289+
assert.Equal(t, "", stderr.String())
290+
browser.Verify(t, "")
291+
} else {
292+
assert.Equal(t, "", stdout.String())
293+
assert.Equal(t, "", stderr.String())
294+
browser.Verify(t, tt.expectedURL)
295+
}
269296
})
270297
}
271298
}

0 commit comments

Comments
 (0)