diff --git a/api/queries_pr.go b/api/queries_pr.go index 3032f6364..e21416b9f 100644 --- a/api/queries_pr.go +++ b/api/queries_pr.go @@ -396,7 +396,7 @@ func PullRequestStatus(client *Client, repo ghrepo.Interface, options StatusOpti // these are always necessary to find the PR for the current branch fields.AddValues([]string{"isCrossRepository", "headRepositoryOwner", "headRefName"}) gr := PullRequestGraphQL(fields.ToSlice()) - fragments = fmt.Sprintf("fragment pr on PullRequest{%[1]s}fragment prWithReviews on PullRequest{%[1]s}", gr) + fragments = fmt.Sprintf("fragment pr on PullRequest{%s}fragment prWithReviews on PullRequest{...pr}", gr) } else { var err error fragments, err = pullRequestFragment(client.http, repo.RepoHost()) @@ -531,67 +531,23 @@ func pullRequestFragment(httpClient *http.Client, hostname string) (string, erro return "", err } - var reviewsFragment string - if prFeatures.HasReviewDecision { - reviewsFragment = "reviewDecision" + fields := []string{ + "number", "title", "state", "url", "isDraft", "isCrossRepository", + "requiresStrictStatusChecks", "headRefName", "headRepositoryOwner", "mergeStateStatus", } - - var statusesFragment string if prFeatures.HasStatusCheckRollup { - statusesFragment = ` - commits(last: 1) { - nodes { - commit { - statusCheckRollup { - contexts(last: 100) { - nodes { - ...on StatusContext { - state - } - ...on CheckRun { - conclusion - status - } - } - } - } - } - } - } - ` + fields = append(fields, "statusCheckRollup") } - var requiresStrictStatusChecks string - if prFeatures.HasBranchProtectionRule { - requiresStrictStatusChecks = ` - baseRef { - branchProtectionRule { - requiresStrictStatusChecks - } - }` + var reviewFields []string + if prFeatures.HasReviewDecision { + reviewFields = append(reviewFields, "reviewDecision") } fragments := fmt.Sprintf(` - fragment pr on PullRequest { - number - title - state - url - headRefName - mergeStateStatus - headRepositoryOwner { - login - } - %s - isCrossRepository - isDraft - %s - } - fragment prWithReviews on PullRequest { - ...pr - %s - } - `, requiresStrictStatusChecks, statusesFragment, reviewsFragment) + fragment pr on PullRequest {%s} + fragment prWithReviews on PullRequest {...pr,%s} + `, PullRequestGraphQL(fields), PullRequestGraphQL(reviewFields)) return fragments, nil } diff --git a/api/query_builder.go b/api/query_builder.go index 3dc97b826..c9ab62d13 100644 --- a/api/query_builder.go +++ b/api/query_builder.go @@ -216,6 +216,8 @@ func PullRequestGraphQL(fields []string) string { q = append(q, `commits(last:1){nodes{commit{oid}}}`) case "commitsCount": // pseudo-field q = append(q, `commits{totalCount}`) + case "requiresStrictStatusChecks": // pseudo-field + q = append(q, `baseRef{branchProtectionRule{requiresStrictStatusChecks}}`) case "statusCheckRollup": q = append(q, StatusCheckRollupGraphQL("")) default: