Merge pull request #5583 from ffalor/gh_status

status: exclude results from archived repositories
This commit is contained in:
Mislav Marohnić 2022-05-10 11:51:20 +02:00 committed by GitHub
commit 78ae6f85c6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 50 additions and 103 deletions

View file

@ -302,71 +302,62 @@ func (s *StatusGetter) LoadNotifications() error {
return nil
}
func (s *StatusGetter) buildSearchQuery() string {
q := `
query AssignedSearch {
assignments: search(first: 25, type: ISSUE, query:"%s") {
edges {
node {
...on Issue {
__typename
updatedAt
title
number
repository {
nameWithOwner
}
}
...on PullRequest {
updatedAt
__typename
title
number
repository {
nameWithOwner
}
}
}
}
}
reviewRequested: search(first: 25, type: ISSUE, query:"%s") {
edges {
node {
...on PullRequest {
updatedAt
__typename
title
number
repository {
nameWithOwner
}
}
}
}
}
}`
assignmentsQ := `assignee:@me state:open%s%s`
requestedQ := `state:open review-requested:@me%s%s`
orgFilter := ""
if s.Org != "" {
orgFilter = " org:" + s.Org
const searchQuery = `
fragment issue on Issue {
__typename
updatedAt
title
number
repository {
nameWithOwner
}
excludeFilter := ""
for _, repo := range s.Exclude {
excludeFilter += " -repo:" + repo
}
assignmentsQ = fmt.Sprintf(assignmentsQ, orgFilter, excludeFilter)
requestedQ = fmt.Sprintf(requestedQ, orgFilter, excludeFilter)
return fmt.Sprintf(q, assignmentsQ, requestedQ)
}
fragment pr on PullRequest {
__typename
updatedAt
title
number
repository {
nameWithOwner
}
}
query AssignedSearch($searchAssigns: String!, $searchReviews: String!, $limit: Int = 25) {
assignments: search(first: $limit, type: ISSUE, query: $searchAssigns) {
edges {
node {
...issue
...pr
}
}
}
reviewRequested: search(first: $limit, type: ISSUE, query: $searchReviews) {
edges {
node {
...pr
}
}
}
}`
// Populate .AssignedPRs, .AssignedIssues, .ReviewRequests
func (s *StatusGetter) LoadSearchResults() error {
q := s.buildSearchQuery()
c := api.NewClientFromHTTP(s.Client)
searchAssigns := `assignee:@me state:open archived:false`
searchReviews := `review-requested:@me state:open archived:false`
if s.Org != "" {
searchAssigns += " org:" + s.Org
searchReviews += " org:" + s.Org
}
for _, repo := range s.Exclude {
searchAssigns += " -repo:" + repo
searchReviews += " -repo:" + repo
}
variables := map[string]interface{}{
"searchAssigns": searchAssigns,
"searchReviews": searchReviews,
}
var resp struct {
Assignments struct {
Edges []struct {
@ -379,7 +370,7 @@ func (s *StatusGetter) LoadSearchResults() error {
}
}
}
err := c.GraphQL(s.hostname(), q, nil, &resp)
err := c.GraphQL(s.hostname(), searchQuery, variables, &resp)
if err != nil {
return fmt.Errorf("could not search for assignments: %w", err)
}

View file

@ -301,47 +301,3 @@ func TestStatusRun(t *testing.T) {
})
}
}
func Test_buildSearchQuery(t *testing.T) {
tests := []struct {
name string
sg StatusGetter
wantReviewQ string
wantAssignedQ string
}{
{
name: "nothing",
wantReviewQ: "first: 25, type: ISSUE, query:\"state:open review-requested:@me",
wantAssignedQ: "assignee:@me state:open",
},
{
name: "exclude one",
sg: StatusGetter{
Exclude: []string{"cli/cli"},
},
wantReviewQ: "first: 25, type: ISSUE, query:\"state:open review-requested:@me -repo:cli/cli",
wantAssignedQ: "assignee:@me state:open",
},
{
name: "exclude several",
sg: StatusGetter{
Exclude: []string{"cli/cli", "vilmibm/testing"},
},
wantReviewQ: "first: 25, type: ISSUE, query:\"state:open review-requested:@me -repo:cli/cli -repo:vilmibm/testing",
wantAssignedQ: "assignee:@me state:open",
},
{
name: "org filter",
sg: StatusGetter{
Org: "cli",
},
wantReviewQ: "first: 25, type: ISSUE, query:\"state:open review-requested:@me org:cli",
wantAssignedQ: "assignee:@me state:open org:cli",
},
}
for _, tt := range tests {
assert.Contains(t, tt.sg.buildSearchQuery(), tt.wantReviewQ)
assert.Contains(t, tt.sg.buildSearchQuery(), tt.wantAssignedQ)
}
}