Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ require (
github.com/ghodss/yaml v1.0.1-0.20190212211648-25d852aebe32
github.com/google/go-cmp v0.4.1
github.com/hashicorp/go-multierror v1.1.0
github.com/jig/teereadcloser v0.0.0-20181016160506-953720c48e05
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51
github.com/mattn/go-colorable v0.1.6 // indirect
github.com/mattn/go-isatty v0.0.12
Expand Down
2 changes: 2 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/U
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
github.com/hashicorp/go-multierror v1.1.0 h1:B9UzwGQJehnUY1yNrnwREHc3fGbC2xefo8g4TbElacI=
github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA=
github.com/jig/teereadcloser v0.0.0-20181016160506-953720c48e05 h1:dSwwtWuwMyarzsbVWOq4QJ8xVy9wgcNomvWyGtrKe+E=
github.com/jig/teereadcloser v0.0.0-20181016160506-953720c48e05/go.mod h1:sRUFlj+HCejvoCRpuhU0EYnNw5FG+YJpz8UFfCf0F2U=
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs=
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8=
github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
Expand Down
29 changes: 28 additions & 1 deletion internal/api/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import (
"path"

"github.com/hashicorp/go-multierror"
"github.com/jig/teereadcloser"
"github.com/kballard/go-shellquote"
"github.com/mattn/go-isatty"
"github.com/pkg/errors"
Expand Down Expand Up @@ -138,6 +139,21 @@ func (r *request) do(ctx context.Context, result interface{}) (bool, error) {
return false, nil
}

if *r.client.opts.Flags.dump {
fmt.Fprintf(r.client.opts.Out, "<-- query:\n%s\n\n", r.query)
if len(r.vars) > 0 {
fmt.Fprintln(r.client.opts.Out, "<-- variables:")
for k, v := range r.vars {
value, err := json.Marshal(v)
if err != nil {
return false, err
}
fmt.Fprintf(r.client.opts.Out, " %s: %s\n", k, string(value))
}
fmt.Fprintln(r.client.opts.Out, "")
}
}

// Create the JSON object.
reqBody, err := json.Marshal(map[string]interface{}{
"query": r.query,
Expand Down Expand Up @@ -181,8 +197,19 @@ func (r *request) do(ctx context.Context, result interface{}) (bool, error) {
return false, fmt.Errorf("error: %s\n\n%s", resp.Status, body)
}

body := resp.Body
if *r.client.opts.Flags.dump {
var buf bytes.Buffer
body = ioaux.TeeReadCloser(resp.Body, &buf)
defer func() {
var out bytes.Buffer
json.Indent(&out, buf.Bytes(), " ", " ")
fmt.Fprintf(r.client.opts.Out, "--> %s\n\n", out.String())
}()
}

// Decode the response.
if err := json.NewDecoder(resp.Body).Decode(result); err != nil {
if err := json.NewDecoder(body).Decode(result); err != nil {
return false, err
}

Expand Down
3 changes: 3 additions & 0 deletions internal/api/flags.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import "flag"
// Flags encapsulates the standard flags that should be added to all commands
// that issue API requests.
type Flags struct {
dump *bool
getCurl *bool
trace *bool
}
Expand All @@ -13,6 +14,7 @@ type Flags struct {
// flag set.
func NewFlags(flagSet *flag.FlagSet) *Flags {
return &Flags{
dump: flagSet.Bool("dump-requests", false, "Log GraphQL requests and responses to stdout"),
getCurl: flagSet.Bool("get-curl", false, "Print the curl command for executing this query and exit (WARNING: includes printing your access token!)"),
trace: flagSet.Bool("trace", false, "Log the trace ID for requests. See https://docs.sourcegraph.com/admin/observability/tracing"),
}
Expand All @@ -21,6 +23,7 @@ func NewFlags(flagSet *flag.FlagSet) *Flags {
func defaultFlags() *Flags {
d := false
return &Flags{
dump: &d,
getCurl: &d,
trace: &d,
}
Expand Down