Skip to content

Commit 2265820

Browse files
committed
Combine issue feature detection into a single GraphQL query
Merge the Issue_fields and IssueClosedStateReason_enumValues introspection queries into one call to avoid an extra API round-trip on GHES.
1 parent 01c83ac commit 2265820

2 files changed

Lines changed: 13 additions & 29 deletions

File tree

internal/featuredetection/feature_detection.go

Lines changed: 11 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,11 @@ func (d *detector) IssueFeatures() (IssueFeatures, error) {
151151
Name string
152152
} `graphql:"fields(includeDeprecated: true)"`
153153
} `graphql:"Issue: __type(name: \"Issue\")"`
154+
IssueClosedStateReason struct {
155+
EnumValues []struct {
156+
Name string
157+
} `graphql:"enumValues(includeDeprecated: true)"`
158+
} `graphql:"IssueClosedStateReason: __type(name: \"IssueClosedStateReason\")"`
154159
}
155160

156161
gql := api.NewClientFromHTTP(d.httpClient)
@@ -165,27 +170,12 @@ func (d *detector) IssueFeatures() (IssueFeatures, error) {
165170
}
166171
}
167172

168-
if !features.StateReason {
169-
return features, nil
170-
}
171-
172-
var issueClosedStateReasonFeatureDetection struct {
173-
IssueClosedStateReason struct {
174-
EnumValues []struct {
175-
Name string
176-
} `graphql:"enumValues(includeDeprecated: true)"`
177-
} `graphql:"IssueClosedStateReason: __type(name: \"IssueClosedStateReason\")"`
178-
}
179-
180-
err = gql.Query(d.host, "IssueClosedStateReason_enumValues", &issueClosedStateReasonFeatureDetection, nil)
181-
if err != nil {
182-
return features, err
183-
}
184-
185-
for _, enumValue := range issueClosedStateReasonFeatureDetection.IssueClosedStateReason.EnumValues {
186-
if enumValue.Name == "DUPLICATE" {
187-
features.StateReasonDuplicate = true
188-
break
173+
if features.StateReason {
174+
for _, enumValue := range featureDetection.IssueClosedStateReason.EnumValues {
175+
if enumValue.Name == "DUPLICATE" {
176+
features.StateReasonDuplicate = true
177+
break
178+
}
189179
}
190180
}
191181

internal/featuredetection/feature_detection_test.go

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -59,10 +59,7 @@ func TestIssueFeatures(t *testing.T) {
5959
`query Issue_fields\b`: heredoc.Doc(`
6060
{ "data": { "Issue": { "fields": [
6161
{"name": "stateReason"}
62-
] } } }
63-
`),
64-
`query IssueClosedStateReason_enumValues\b`: heredoc.Doc(`
65-
{ "data": { "IssueClosedStateReason": { "enumValues": [
62+
] }, "IssueClosedStateReason": { "enumValues": [
6663
{"name": "COMPLETED"},
6764
{"name": "NOT_PLANNED"}
6865
] } } }
@@ -82,10 +79,7 @@ func TestIssueFeatures(t *testing.T) {
8279
`query Issue_fields\b`: heredoc.Doc(`
8380
{ "data": { "Issue": { "fields": [
8481
{"name": "stateReason"}
85-
] } } }
86-
`),
87-
`query IssueClosedStateReason_enumValues\b`: heredoc.Doc(`
88-
{ "data": { "IssueClosedStateReason": { "enumValues": [
82+
] }, "IssueClosedStateReason": { "enumValues": [
8983
{"name": "COMPLETED"},
9084
{"name": "NOT_PLANNED"},
9185
{"name": "DUPLICATE"}

0 commit comments

Comments
 (0)