Skip to content

Commit 813fbc9

Browse files
committed
Ensure that we don't reuse the same deserialization struct over pagination iterations
This is to avoid subtle deserialization issues in nested slices.
1 parent a90b62f commit 813fbc9

File tree

3 files changed

+14
-7
lines changed

3 files changed

+14
-7
lines changed

api/queries_org.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import (
99

1010
// OrganizationProjects fetches all open projects for an organization
1111
func OrganizationProjects(client *Client, repo ghrepo.Interface) ([]RepoProject, error) {
12-
var query struct {
12+
type responseData struct {
1313
Organization struct {
1414
Projects struct {
1515
Nodes []RepoProject
@@ -30,6 +30,7 @@ func OrganizationProjects(client *Client, repo ghrepo.Interface) ([]RepoProject,
3030

3131
var projects []RepoProject
3232
for {
33+
var query responseData
3334
err := gql.QueryNamed(context.Background(), "OrganizationProjectList", &query, variables)
3435
if err != nil {
3536
return nil, err
@@ -52,7 +53,7 @@ type OrgTeam struct {
5253

5354
// OrganizationTeams fetches all the teams in an organization
5455
func OrganizationTeams(client *Client, repo ghrepo.Interface) ([]OrgTeam, error) {
55-
var query struct {
56+
type responseData struct {
5657
Organization struct {
5758
Teams struct {
5859
Nodes []OrgTeam
@@ -73,6 +74,7 @@ func OrganizationTeams(client *Client, repo ghrepo.Interface) ([]OrgTeam, error)
7374

7475
var teams []OrgTeam
7576
for {
77+
var query responseData
7678
err := gql.QueryNamed(context.Background(), "OrganizationTeamList", &query, variables)
7779
if err != nil {
7880
return nil, err

api/queries_repo.go

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -657,7 +657,7 @@ type RepoProject struct {
657657

658658
// RepoProjects fetches all open projects for a repository
659659
func RepoProjects(client *Client, repo ghrepo.Interface) ([]RepoProject, error) {
660-
var query struct {
660+
type responseData struct {
661661
Repository struct {
662662
Projects struct {
663663
Nodes []RepoProject
@@ -679,6 +679,7 @@ func RepoProjects(client *Client, repo ghrepo.Interface) ([]RepoProject, error)
679679

680680
var projects []RepoProject
681681
for {
682+
var query responseData
682683
err := gql.QueryNamed(context.Background(), "RepositoryProjectList", &query, variables)
683684
if err != nil {
684685
return nil, err
@@ -701,7 +702,7 @@ type RepoAssignee struct {
701702

702703
// RepoAssignableUsers fetches all the assignable users for a repository
703704
func RepoAssignableUsers(client *Client, repo ghrepo.Interface) ([]RepoAssignee, error) {
704-
var query struct {
705+
type responseData struct {
705706
Repository struct {
706707
AssignableUsers struct {
707708
Nodes []RepoAssignee
@@ -723,6 +724,7 @@ func RepoAssignableUsers(client *Client, repo ghrepo.Interface) ([]RepoAssignee,
723724

724725
var users []RepoAssignee
725726
for {
727+
var query responseData
726728
err := gql.QueryNamed(context.Background(), "RepositoryAssignableUsers", &query, variables)
727729
if err != nil {
728730
return nil, err
@@ -745,7 +747,7 @@ type RepoLabel struct {
745747

746748
// RepoLabels fetches all the labels in a repository
747749
func RepoLabels(client *Client, repo ghrepo.Interface) ([]RepoLabel, error) {
748-
var query struct {
750+
type responseData struct {
749751
Repository struct {
750752
Labels struct {
751753
Nodes []RepoLabel
@@ -767,6 +769,7 @@ func RepoLabels(client *Client, repo ghrepo.Interface) ([]RepoLabel, error) {
767769

768770
var labels []RepoLabel
769771
for {
772+
var query responseData
770773
err := gql.QueryNamed(context.Background(), "RepositoryLabelList", &query, variables)
771774
if err != nil {
772775
return nil, err
@@ -789,7 +792,7 @@ type RepoMilestone struct {
789792

790793
// RepoMilestones fetches all open milestones in a repository
791794
func RepoMilestones(client *Client, repo ghrepo.Interface) ([]RepoMilestone, error) {
792-
var query struct {
795+
type responseData struct {
793796
Repository struct {
794797
Milestones struct {
795798
Nodes []RepoMilestone
@@ -811,6 +814,7 @@ func RepoMilestones(client *Client, repo ghrepo.Interface) ([]RepoMilestone, err
811814

812815
var milestones []RepoMilestone
813816
for {
817+
var query responseData
814818
err := gql.QueryNamed(context.Background(), "RepositoryMilestoneList", &query, variables)
815819
if err != nil {
816820
return nil, err

pkg/cmd/release/list/http.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ type Release struct {
2121
}
2222

2323
func fetchReleases(httpClient *http.Client, repo ghrepo.Interface, limit int) ([]Release, error) {
24-
var query struct {
24+
type responseData struct {
2525
Repository struct {
2626
Releases struct {
2727
Nodes []Release
@@ -50,6 +50,7 @@ func fetchReleases(httpClient *http.Client, repo ghrepo.Interface, limit int) ([
5050
var releases []Release
5151
loop:
5252
for {
53+
var query responseData
5354
err := gql.QueryNamed(context.Background(), "RepositoryReleaseList", &query, variables)
5455
if err != nil {
5556
return nil, err

0 commit comments

Comments
 (0)