MCPcopy
hub / github.com/cli/cli / processResponse

Function processResponse

pkg/cmd/api/api.go:464–547  ·  view source on GitHub ↗
(resp *http.Response, opts *ApiOptions, bodyWriter, headersWriter io.Writer, template *template.Template, isFirstPage, isLastPage bool)

Source from the content-addressed store, hash-verified

462var jsonContentTypeRE = regexp.MustCompile(`[/+]json(;|$)`)
463
464func processResponse(resp *http.Response, opts *ApiOptions, bodyWriter, headersWriter io.Writer, template *template.Template, isFirstPage, isLastPage bool) (endCursor string, err error) {
465 if opts.ShowResponseHeaders {
466 fmt.Fprintln(headersWriter, resp.Proto, resp.Status)
467 printHeaders(headersWriter, resp.Header, opts.IO.ColorEnabled())
468 fmt.Fprint(headersWriter, "\r\n")
469 }
470
471 if resp.StatusCode == 204 {
472 return
473 }
474 var responseBody io.Reader = resp.Body
475 defer resp.Body.Close()
476
477 isJSON := jsonContentTypeRE.MatchString(resp.Header.Get("Content-Type"))
478
479 var serverError string
480 if isJSON && (opts.RequestPath == "graphql" || resp.StatusCode >= 400) {
481 if !strings.EqualFold(opts.RequestMethod, "HEAD") {
482 responseBody, serverError, err = parseErrorResponse(responseBody, resp.StatusCode)
483 if err != nil {
484 return
485 }
486 }
487 }
488
489 var bodyCopy *bytes.Buffer
490 isGraphQLPaginate := isJSON && resp.StatusCode == 200 && opts.Paginate && opts.RequestPath == "graphql"
491 if isGraphQLPaginate {
492 bodyCopy = &bytes.Buffer{}
493 responseBody = io.TeeReader(responseBody, bodyCopy)
494 }
495
496 if opts.FilterOutput != "" && serverError == "" {
497 // TODO: reuse parsed query across pagination invocations
498 indent := ""
499 if opts.IO.IsStdoutTTY() {
500 indent = ttyIndent
501 }
502 err = jq.EvaluateFormatted(responseBody, bodyWriter, opts.FilterOutput, indent, opts.IO.ColorEnabled())
503 if err != nil {
504 return
505 }
506 } else if opts.Template != "" && serverError == "" {
507 err = template.Execute(responseBody)
508 if err != nil {
509 return
510 }
511 } else if isJSON && opts.IO.ColorEnabled() {
512 err = jsoncolor.Write(bodyWriter, responseBody, ttyIndent)
513 } else {
514 if isJSON && opts.Paginate && !opts.Slurp && !isGraphQLPaginate && !opts.ShowResponseHeaders {
515 responseBody = &paginatedArrayReader{
516 Reader: responseBody,
517 isFirstPage: isFirstPage,
518 isLastPage: isLastPage,
519 }
520 }
521 _, err = io.Copy(bodyWriter, responseBody)

Callers 2

apiRunFunction · 0.85

Calls 11

WriteFunction · 0.92
ScopesSuggestionFunction · 0.92
SSOURLFunction · 0.92
printHeadersFunction · 0.85
parseErrorResponseFunction · 0.85
findEndCursorFunction · 0.85
ColorEnabledMethod · 0.80
IsStdoutTTYMethod · 0.80
CloseMethod · 0.65
GetMethod · 0.65
CopyMethod · 0.45

Tested by 1