func (t *Github) getIssuesList(input *messages.GetIssuesList) []github.Issue { if input.Repo == "" { options := github.IssueListOptions{ Filter: "all", } if input.Status != "" { options.Labels = []string{input.Status} } options.Page = 0 options.PerPage = 100 githubIssues, _, err := t.client.Issues.ListByOrg(input.Org, &options) if err != nil { log.Println(err.Error()) } return githubIssues } options := github.IssueListByRepoOptions{} if input.Status != "" { options.Labels = []string{input.Status} } options.Page = 0 options.PerPage = 100 githubIssues, _, err := t.client.Issues.ListByRepo(input.Org, input.Repo, &options) if err != nil { log.Println(err.Error()) } return githubIssues }
// Filters issues based on mileston, assignee, creatoror, labels or state. // Pass empty strings for things that arnt to be filtered. // Returns array of issues in order asked for. // TODO(butlerx) filter offline issues if query of repo fails. func IssuesFilter(repo, state, milestone, assignee, creator, sort, order string, labels []string) ([]github.Issue, error) { s := strings.Split(repo, "/") sorting := new(github.IssueListByRepoOptions) if len(labels) != 0 { sorting.Labels = labels } if state != "" { sorting.State = state } if milestone != "" { sorting.Milestone = milestone } if assignee != "" { sorting.Assignee = assignee } if creator != "" { sorting.Creator = creator } if sort != "" { sorting.Sort = sort } if order != "" { sorting.Direction = order } issues, _, err := client.Issues.ListByRepo(s[0], s[1], sorting) return issues, err }
// ListAllIssues grabs all issues matching the options, so you don't have to // worry about paging. Enforces some constraints, like min/max PR number and // having a valid user. func (config *Config) ListAllIssues(listOpts *github.IssueListByRepoOptions) ([]*github.Issue, error) { allIssues := []*github.Issue{} page := 1 for { glog.V(4).Infof("Fetching page %d of issues", page) listOpts.ListOptions = github.ListOptions{PerPage: 100, Page: page} issues, response, err := config.client.Issues.ListByRepo(config.Org, config.Project, listOpts) config.analytics.ListIssues.Call(config, response) if err != nil { return nil, err } for i := range issues { issue := &issues[i] if issue.Number == nil { glog.Infof("Skipping issue with no number, very strange") continue } if issue.User == nil || issue.User.Login == nil { glog.V(2).Infof("Skipping PR %d with no user info %#v.", *issue.Number, issue.User) continue } if *issue.Number < config.MinPRNumber { glog.V(6).Infof("Dropping %d < %d", *issue.Number, config.MinPRNumber) continue } if *issue.Number > config.MaxPRNumber { glog.V(6).Infof("Dropping %d > %d", *issue.Number, config.MaxPRNumber) continue } allIssues = append(allIssues, issue) } if response.LastPage == 0 || response.LastPage <= page { break } page++ } return allIssues, nil }