in commands/issuable/list/issuable_list.go [191:341]
func listRun(opts *ListOptions) error {
apiClient, err := opts.HTTPClient()
if err != nil {
return err
}
repo, err := opts.BaseRepo()
if err != nil {
return err
}
listOpts := &gitlab.ListProjectIssuesOptions{
State: gitlab.Ptr(opts.State),
In: gitlab.Ptr(opts.In),
}
listOpts.Page = 1
listOpts.PerPage = 30
if opts.Assignee == "" && opts.Mine {
opts.Assignee = "@me"
}
if opts.Assignee != "" {
uid, err := userID(apiClient, opts.Assignee)
if err != nil {
return err
}
listOpts.AssigneeID = gitlab.Ptr(uid)
}
if opts.NotAssignee != "" {
uid, err := userID(apiClient, opts.NotAssignee)
if err != nil {
return err
}
listOpts.NotAssigneeID = gitlab.Ptr(uid)
}
if opts.Author != "" {
uid, err := userID(apiClient, opts.Author)
if err != nil {
return err
}
listOpts.AuthorID = gitlab.Ptr(uid)
}
if opts.NotAuthor != "" {
uid, err := userID(apiClient, opts.NotAuthor)
if err != nil {
return err
}
listOpts.NotAuthorID = gitlab.Ptr(uid)
}
if opts.Search != "" {
listOpts.Search = gitlab.Ptr(opts.Search)
opts.ListType = "search"
}
if len(opts.Labels) != 0 {
listOpts.Labels = (*gitlab.LabelOptions)(&opts.Labels)
opts.ListType = "search"
}
if len(opts.NotLabels) != 0 {
listOpts.NotLabels = (*gitlab.LabelOptions)(&opts.NotLabels)
opts.ListType = "search"
}
if opts.Milestone != "" {
listOpts.Milestone = gitlab.Ptr(opts.Milestone)
opts.ListType = "search"
}
if opts.Confidential {
listOpts.Confidential = gitlab.Ptr(opts.Confidential)
opts.ListType = "search"
}
if opts.Page != 0 {
listOpts.Page = opts.Page
opts.ListType = "search"
}
if opts.PerPage != 0 {
listOpts.PerPage = opts.PerPage
opts.ListType = "search"
}
issueType := "issue"
if opts.IssueType != "" {
listOpts.IssueType = gitlab.Ptr(opts.IssueType)
opts.ListType = "search"
issueType = opts.IssueType
}
if issueType == "issue" && opts.Iteration != 0 {
listOpts.IterationID = gitlab.Ptr(opts.Iteration)
}
var issues []*gitlab.Issue
title := utils.NewListTitle(fmt.Sprintf("%s %s", opts.TitleQualifier, issueType))
title.RepoName = repo.FullName()
switch {
case opts.Epic != 0:
issues, err = listEpicIssues(apiClient, opts, listOpts)
if err != nil {
return err
}
title.RepoName = fmt.Sprintf("%s&%d", opts.Group, opts.Epic)
case opts.Group != "":
issues, err = api.ListGroupIssues(apiClient, opts.Group, api.ProjectListIssueOptionsToGroup(listOpts))
if err != nil {
return err
}
title.RepoName = opts.Group
default:
issues, err = api.ListProjectIssues(apiClient, repo.FullName(), listOpts)
if err != nil {
return err
}
}
title.Page = listOpts.Page
title.ListActionType = opts.ListType
title.CurrentPageTotal = len(issues)
if opts.Output == "json" {
issueListJSON, _ := json.Marshal(issues)
fmt.Fprintln(opts.IO.StdOut, string(issueListJSON))
return nil
}
if opts.OutputFormat == "ids" {
for _, i := range issues {
fmt.Fprintf(opts.IO.StdOut, "%d\n", i.IID)
}
return nil
}
if opts.OutputFormat == "urls" {
for _, i := range issues {
fmt.Fprintf(opts.IO.StdOut, "%s\n", i.WebURL)
}
return nil
}
if opts.IO.StartPager() != nil {
return fmt.Errorf("failed to start pager: %q", err)
}
defer opts.IO.StopPager()
fmt.Fprintf(opts.IO.StdOut, "%s\n%s\n", title.Describe(), issueutils.DisplayIssueList(opts.IO, issues, repo.FullName()))
return nil
}