Merge pull request #5583 from ffalor/gh_status
status: exclude results from archived repositories
This commit is contained in:
commit
78ae6f85c6
2 changed files with 50 additions and 103 deletions
|
|
@ -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)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue