Added option to specify branch in gh repo view
This commit is contained in:
parent
9a8deb08fb
commit
381d1a1cdb
3 changed files with 43 additions and 4 deletions
|
|
@ -17,14 +17,14 @@ type RepoReadme struct {
|
|||
Content string
|
||||
}
|
||||
|
||||
func RepositoryReadme(client *http.Client, repo ghrepo.Interface) (*RepoReadme, error) {
|
||||
func RepositoryReadme(client *http.Client, repo ghrepo.Interface, branch string) (*RepoReadme, error) {
|
||||
apiClient := api.NewClientFromHTTP(client)
|
||||
var response struct {
|
||||
Name string
|
||||
Content string
|
||||
}
|
||||
|
||||
err := apiClient.REST(repo.RepoHost(), "GET", fmt.Sprintf("repos/%s/readme", ghrepo.FullName(repo)), nil, &response)
|
||||
err := apiClient.REST(repo.RepoHost(), "GET", getReadmePath(repo, branch), nil, &response)
|
||||
if err != nil {
|
||||
var httpError api.HTTPError
|
||||
if errors.As(err, &httpError) && httpError.StatusCode == 404 {
|
||||
|
|
@ -43,3 +43,11 @@ func RepositoryReadme(client *http.Client, repo ghrepo.Interface) (*RepoReadme,
|
|||
Content: string(decoded),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func getReadmePath(repo ghrepo.Interface, branch string) string {
|
||||
path := fmt.Sprintf("repos/%s/readme", ghrepo.FullName(repo))
|
||||
if branch != "" {
|
||||
path = fmt.Sprintf("%s?ref=%s", path, branch)
|
||||
}
|
||||
return path
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@ type ViewOptions struct {
|
|||
|
||||
RepoArg string
|
||||
Web bool
|
||||
Branch string
|
||||
}
|
||||
|
||||
func NewCmdView(f *cmdutil.Factory, runF func(*ViewOptions) error) *cobra.Command {
|
||||
|
|
@ -41,7 +42,9 @@ func NewCmdView(f *cmdutil.Factory, runF func(*ViewOptions) error) *cobra.Comman
|
|||
|
||||
With no argument, the repository for the current directory is displayed.
|
||||
|
||||
With '--web', open the repository in a web browser instead.`,
|
||||
With '--web', open the repository in a web browser instead.
|
||||
|
||||
With '--branch', view a specific branch of the repository.`,
|
||||
Args: cobra.MaximumNArgs(1),
|
||||
RunE: func(c *cobra.Command, args []string) error {
|
||||
if len(args) > 0 {
|
||||
|
|
@ -55,6 +58,7 @@ With '--web', open the repository in a web browser instead.`,
|
|||
}
|
||||
|
||||
cmd.Flags().BoolVarP(&opts.Web, "web", "w", false, "Open a repository in the browser")
|
||||
cmd.Flags().StringVarP(&opts.Branch, "branch", "b", "", "View a specific branch of the repository")
|
||||
|
||||
return cmd
|
||||
}
|
||||
|
|
@ -104,7 +108,7 @@ func viewRun(opts *ViewOptions) error {
|
|||
|
||||
fullName := ghrepo.FullName(toView)
|
||||
|
||||
readme, err := RepositoryReadme(httpClient, toView)
|
||||
readme, err := RepositoryReadme(httpClient, toView, opts.Branch)
|
||||
if err != nil && err != NotFoundError {
|
||||
return err
|
||||
}
|
||||
|
|
|
|||
|
|
@ -47,6 +47,14 @@ func TestNewCmdView(t *testing.T) {
|
|||
Web: true,
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "sets branch",
|
||||
cli: "-b feat/awesome",
|
||||
wants: ViewOptions{
|
||||
RepoArg: "",
|
||||
Branch: "feat/awesome",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
|
|
@ -80,6 +88,7 @@ func TestNewCmdView(t *testing.T) {
|
|||
assert.NoError(t, err)
|
||||
|
||||
assert.Equal(t, tt.wants.Web, gotOpts.Web)
|
||||
assert.Equal(t, tt.wants.Branch, gotOpts.Branch)
|
||||
assert.Equal(t, tt.wants.RepoArg, gotOpts.RepoArg)
|
||||
})
|
||||
}
|
||||
|
|
@ -198,6 +207,24 @@ func Test_ViewRun(t *testing.T) {
|
|||
View this repository on GitHub: https://github.com/jill/valentine
|
||||
`),
|
||||
},
|
||||
{
|
||||
name: "branch arg",
|
||||
opts: &ViewOptions{
|
||||
Branch: "feat/awesome",
|
||||
},
|
||||
stdoutTTY: true,
|
||||
wantOut: heredoc.Doc(`
|
||||
OWNER/REPO
|
||||
social distancing
|
||||
|
||||
|
||||
# truly cool readme check it out
|
||||
|
||||
|
||||
|
||||
View this repository on GitHub: https://github.com/OWNER/REPO
|
||||
`),
|
||||
},
|
||||
{
|
||||
name: "no args",
|
||||
stdoutTTY: true,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue