Merge pull request #6051 from cli/api-headers-pager
Fix writing `gh api -i` response headers to terminal pager
This commit is contained in:
commit
95dcd4a6e0
3 changed files with 19 additions and 18 deletions
|
|
@ -272,10 +272,7 @@ func apiRun(opts *ApiOptions) error {
|
|||
httpClient = api.NewCachedHTTPClient(httpClient, opts.CacheTTL)
|
||||
}
|
||||
|
||||
headersOutputStream := opts.IO.Out
|
||||
if opts.Silent {
|
||||
opts.IO.Out = io.Discard
|
||||
} else {
|
||||
if !opts.Silent {
|
||||
if err := opts.IO.StartPager(); err == nil {
|
||||
defer opts.IO.StopPager()
|
||||
} else {
|
||||
|
|
@ -283,6 +280,12 @@ func apiRun(opts *ApiOptions) error {
|
|||
}
|
||||
}
|
||||
|
||||
bodyWriter := opts.IO.Out
|
||||
headersWriter := opts.IO.Out
|
||||
if opts.Silent {
|
||||
bodyWriter = io.Discard
|
||||
}
|
||||
|
||||
cfg, err := opts.Config()
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
@ -303,7 +306,7 @@ func apiRun(opts *ApiOptions) error {
|
|||
return err
|
||||
}
|
||||
|
||||
endCursor, err := processResponse(resp, opts, headersOutputStream, &template)
|
||||
endCursor, err := processResponse(resp, opts, bodyWriter, headersWriter, &template)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
@ -330,11 +333,11 @@ func apiRun(opts *ApiOptions) error {
|
|||
return template.End()
|
||||
}
|
||||
|
||||
func processResponse(resp *http.Response, opts *ApiOptions, headersOutputStream io.Writer, template *export.Template) (endCursor string, err error) {
|
||||
func processResponse(resp *http.Response, opts *ApiOptions, bodyWriter, headersWriter io.Writer, template *export.Template) (endCursor string, err error) {
|
||||
if opts.ShowResponseHeaders {
|
||||
fmt.Fprintln(headersOutputStream, resp.Proto, resp.Status)
|
||||
printHeaders(headersOutputStream, resp.Header, opts.IO.ColorEnabled())
|
||||
fmt.Fprint(headersOutputStream, "\r\n")
|
||||
fmt.Fprintln(headersWriter, resp.Proto, resp.Status)
|
||||
printHeaders(headersWriter, resp.Header, opts.IO.ColorEnabled())
|
||||
fmt.Fprint(headersWriter, "\r\n")
|
||||
}
|
||||
|
||||
if resp.StatusCode == 204 {
|
||||
|
|
@ -362,20 +365,20 @@ func processResponse(resp *http.Response, opts *ApiOptions, headersOutputStream
|
|||
|
||||
if opts.FilterOutput != "" && serverError == "" {
|
||||
// TODO: reuse parsed query across pagination invocations
|
||||
err = export.FilterJSON(opts.IO.Out, responseBody, opts.FilterOutput)
|
||||
err = export.FilterJSON(bodyWriter, responseBody, opts.FilterOutput)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
} else if opts.Template != "" && serverError == "" {
|
||||
// TODO: reuse parsed template across pagination invocations
|
||||
err = template.Execute(responseBody)
|
||||
err = template.Execute(bodyWriter, responseBody)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
} else if isJSON && opts.IO.ColorEnabled() {
|
||||
err = jsoncolor.Write(opts.IO.Out, responseBody, " ")
|
||||
err = jsoncolor.Write(bodyWriter, responseBody, " ")
|
||||
} else {
|
||||
_, err = io.Copy(opts.IO.Out, responseBody)
|
||||
_, err = io.Copy(bodyWriter, responseBody)
|
||||
}
|
||||
if err != nil {
|
||||
return
|
||||
|
|
|
|||
|
|
@ -1299,7 +1299,7 @@ func Test_processResponse_template(t *testing.T) {
|
|||
Template: `{{range .}}{{.title}} ({{.labels | pluck "name" | join ", " }}){{"\n"}}{{end}}`,
|
||||
}
|
||||
template := export.NewTemplate(ios, opts.Template)
|
||||
_, err := processResponse(&resp, &opts, io.Discard, &template)
|
||||
_, err := processResponse(&resp, &opts, ios.Out, io.Discard, &template)
|
||||
require.NoError(t, err)
|
||||
|
||||
err = template.End()
|
||||
|
|
|
|||
|
|
@ -76,9 +76,7 @@ func (t *Template) parseTemplate(tpl string) (*template.Template, error) {
|
|||
return template.New("").Funcs(templateFuncs).Parse(tpl)
|
||||
}
|
||||
|
||||
func (t *Template) Execute(input io.Reader) error {
|
||||
w := t.io.Out
|
||||
|
||||
func (t *Template) Execute(w io.Writer, input io.Reader) error {
|
||||
if t.template == nil {
|
||||
template, err := t.parseTemplate(t.templateStr)
|
||||
if err != nil {
|
||||
|
|
@ -103,7 +101,7 @@ func (t *Template) Execute(input io.Reader) error {
|
|||
|
||||
func ExecuteTemplate(io *iostreams.IOStreams, input io.Reader, template string) error {
|
||||
t := NewTemplate(io, template)
|
||||
if err := t.Execute(input); err != nil {
|
||||
if err := t.Execute(io.Out, input); err != nil {
|
||||
return err
|
||||
}
|
||||
return t.End()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue