Skip to content

Commit 3c4e027

Browse files
authored
Merge branch 'trunk' into v2
2 parents 3241d11 + 98bbeb2 commit 3c4e027

File tree

5 files changed

+74
-15
lines changed

5 files changed

+74
-15
lines changed

example_gh_test.go

+31
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
"github.com/cli/go-gh/pkg/tableprinter"
1414
"github.com/cli/go-gh/pkg/term"
1515
graphql "github.com/cli/shurcooL-graphql"
16+
"github.com/shurcooL/githubv4"
1617
)
1718

1819
// Execute 'gh issue list -R cli/cli', and print the output.
@@ -154,6 +155,36 @@ func ExampleGQLClient() {
154155
fmt.Println(query)
155156
}
156157

158+
// Add a star to the cli/go-gh repository using the GQL API.
159+
func ExampleGQLClient_Mutate_simple() {
160+
client, err := gh.GQLClient(nil)
161+
if err != nil {
162+
log.Fatal(err)
163+
}
164+
var m struct {
165+
AddStar struct {
166+
Starrable struct {
167+
Repository struct {
168+
StargazerCount int
169+
} `graphql:"... on Repository"`
170+
Gist struct {
171+
StargazerCount int
172+
} `graphql:"... on Gist"`
173+
}
174+
} `graphql:"addStar(input: $input)"`
175+
}
176+
variables := map[string]interface{}{
177+
"input": githubv4.AddStarInput{
178+
StarrableID: githubv4.NewID("R_kgDOF_MgQQ"),
179+
},
180+
}
181+
err = client.Mutate("AddStar", &m, variables)
182+
if err != nil {
183+
log.Fatal(err)
184+
}
185+
fmt.Println(m.AddStar.Starrable.Repository.StargazerCount)
186+
}
187+
157188
// Get repository for the current directory.
158189
func ExampleCurrentRepository() {
159190
repo, err := repository.CurrentRepository()

go.mod

+6-3
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,11 @@ require (
1414
github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d
1515
github.com/muesli/reflow v0.3.0
1616
github.com/muesli/termenv v0.12.0
17+
github.com/shurcooL/githubv4 v0.0.0-20221229060216-a8d4a561cc93
1718
github.com/stretchr/testify v1.7.0
1819
github.com/thlib/go-timezone-local v0.0.0-20210907160436-ef149e42d28e
19-
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab
20-
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211
20+
golang.org/x/sys v0.4.0
21+
golang.org/x/term v0.4.0
2122
gopkg.in/h2non/gock.v1 v1.1.2
2223
gopkg.in/yaml.v3 v3.0.1
2324
)
@@ -39,8 +40,10 @@ require (
3940
github.com/olekukonko/tablewriter v0.0.5 // indirect
4041
github.com/pmezard/go-difflib v1.0.0 // indirect
4142
github.com/rivo/uniseg v0.2.0 // indirect
43+
github.com/shurcooL/graphql v0.0.0-20220606043923-3cf50f8a0a29 // indirect
4244
github.com/yuin/goldmark v1.4.4 // indirect
4345
github.com/yuin/goldmark-emoji v1.0.1 // indirect
44-
golang.org/x/net v0.0.0-20220923203811-8be639271d50 // indirect
46+
golang.org/x/net v0.5.0 // indirect
47+
golang.org/x/oauth2 v0.4.0 // indirect
4548
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect
4649
)

go.sum

+15-3
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c
1717
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
1818
github.com/dlclark/regexp2 v1.4.0 h1:F1rxgk7p4uKjwIQxBs9oAXe5CqrXlCduYEJvrF4u93E=
1919
github.com/dlclark/regexp2 v1.4.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc=
20+
github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=
2021
github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
2122
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4=
2223
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ=
@@ -65,6 +66,10 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN
6566
github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
6667
github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY=
6768
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
69+
github.com/shurcooL/githubv4 v0.0.0-20221229060216-a8d4a561cc93 h1:JNy04upyaTaAGVlUFAL+60/1nphmJtuTu36tLhbaqXk=
70+
github.com/shurcooL/githubv4 v0.0.0-20221229060216-a8d4a561cc93/go.mod h1:hAF0iLZy4td2EX+/8Tw+4nodhlMrwN3HupfaXj3zkGo=
71+
github.com/shurcooL/graphql v0.0.0-20220606043923-3cf50f8a0a29 h1:B1PEwpArrNp4dkQrfxh/abbBAOZBVp0ds+fBEOUOqOc=
72+
github.com/shurcooL/graphql v0.0.0-20220606043923-3cf50f8a0a29/go.mod h1:AuYgA5Kyo4c7HfUmvRGs/6rGlMMV/6B1bVnB9JxJEEg=
6873
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
6974
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
7075
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
@@ -76,8 +81,11 @@ github.com/yuin/goldmark v1.4.4/go.mod h1:rmuwmfZ0+bvzB24eSC//bk1R1Zp3hM0OXYv/G2
7681
github.com/yuin/goldmark-emoji v1.0.1 h1:ctuWEyzGBwiucEqxzwe0SOYDXPAucOrE9NQC18Wa1os=
7782
github.com/yuin/goldmark-emoji v1.0.1/go.mod h1:2w1E6FEWLcDQkoTE+7HU6QF1F6SLlNGjRIBbIZQFqkQ=
7883
golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
79-
golang.org/x/net v0.0.0-20220923203811-8be639271d50 h1:vKyz8L3zkd+xrMeIaBsQ/MNVPVFSffdaU3ZyYlBGFnI=
8084
golang.org/x/net v0.0.0-20220923203811-8be639271d50/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
85+
golang.org/x/net v0.5.0 h1:GyT4nK/YDHSqa1c4753ouYCDajOYKTja9Xb/OHtgvSw=
86+
golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws=
87+
golang.org/x/oauth2 v0.4.0 h1:NF0gk8LVPg1Ml7SSbGyySuoxdsXitj7TvgvuRxIMc/M=
88+
golang.org/x/oauth2 v0.4.0/go.mod h1:RznEsdpjGAINPTOF0UH/t+xJ75L18YO3Ho6Pyn+uRec=
8189
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
8290
golang.org/x/sys v0.0.0-20210319071255-635bc2c9138d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
8391
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -87,15 +95,19 @@ golang.org/x/sys v0.0.0-20210831042530-f4d43177bf5e/go.mod h1:oPkhp1MJrh7nUepCBc
8795
golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
8896
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
8997
golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
90-
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab h1:2QkjZIsXupsJbJIdSjjUOgWK3aEtzyuh2mPt3l/CkeU=
9198
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
99+
golang.org/x/sys v0.4.0 h1:Zr2JFtRQNX3BCZ8YtxRE9hNJYC8J6I1MVbMg6owUp18=
100+
golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
92101
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
93-
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY=
94102
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
103+
golang.org/x/term v0.4.0 h1:O7UWfv5+A2qiuulQk30kVinPoMtoIPeVaKLEgLpVkvg=
104+
golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ=
95105
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
96106
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
97107
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
98108
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
109+
google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c=
110+
google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw=
99111
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
100112
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
101113
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=

pkg/jq/jq.go

+6-9
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ func Evaluate(input io.Reader, output io.Writer, expr string) error {
3939
return err
4040
}
4141

42+
enc := json.NewEncoder(output)
43+
4244
iter := code.Run(responseData)
4345
for {
4446
v, ok := iter.Next()
@@ -53,18 +55,13 @@ func Evaluate(input io.Reader, output io.Writer, expr string) error {
5355
if err != nil {
5456
return err
5557
}
56-
} else {
57-
var jsonFragment []byte
58-
jsonFragment, err = json.Marshal(v)
58+
} else if tt, ok := v.([]interface{}); ok && tt == nil {
59+
_, err = fmt.Fprint(output, "[]\n")
5960
if err != nil {
6061
return err
6162
}
62-
_, err = output.Write(jsonFragment)
63-
if err != nil {
64-
return err
65-
}
66-
_, err = fmt.Fprint(output, "\n")
67-
if err != nil {
63+
} else {
64+
if err = enc.Encode(v); err != nil {
6865
return err
6966
}
7067
}

pkg/jq/jq_test.go

+16
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,22 @@ func TestEvaluate(t *testing.T) {
4646
},
4747
wantW: "{\"login\":\"monalisa\"}\n",
4848
},
49+
{
50+
name: "empty array",
51+
args: args{
52+
json: strings.NewReader(`[]`),
53+
expr: `.`,
54+
},
55+
wantW: "[]\n",
56+
},
57+
{
58+
name: "empty array 2",
59+
args: args{
60+
json: strings.NewReader(`[]`),
61+
expr: `[]`,
62+
},
63+
wantW: "[]\n",
64+
},
4965
{
5066
name: "complex",
5167
args: args{

0 commit comments

Comments
 (0)