in commands/mr/list/mr_list.go [166:302]
func listRun(opts *ListOptions) error {
var mergeRequests []*gitlab.BasicMergeRequest
apiClient, err := opts.HTTPClient()
if err != nil {
return err
}
repo, err := opts.BaseRepo()
if err != nil {
return err
}
l := &gitlab.ListProjectMergeRequestsOptions{
State: gitlab.Ptr(opts.State),
ListOptions: gitlab.ListOptions{
Page: 1,
PerPage: 30,
},
}
jsonOutput := opts.OutputFormat == "json"
if jsonOutput {
l.Page = 0
l.PerPage = 0
}
if opts.Author != "" {
u, err := api.UserByName(apiClient, opts.Author)
if err != nil {
return err
}
l.AuthorID = gitlab.Ptr(u.ID)
opts.ListType = "search"
}
if opts.SourceBranch != "" {
l.SourceBranch = gitlab.Ptr(opts.SourceBranch)
opts.ListType = "search"
}
if opts.TargetBranch != "" {
l.TargetBranch = gitlab.Ptr(opts.TargetBranch)
opts.ListType = "search"
}
if opts.Search != "" {
l.Search = gitlab.Ptr(opts.Search)
opts.ListType = "search"
}
if len(opts.Labels) > 0 {
l.Labels = (*gitlab.LabelOptions)(&opts.Labels)
opts.ListType = "search"
}
if len(opts.NotLabels) > 0 {
l.NotLabels = (*gitlab.LabelOptions)(&opts.NotLabels)
opts.ListType = "search"
}
if opts.Milestone != "" {
l.Milestone = gitlab.Ptr(opts.Milestone)
opts.ListType = "search"
}
if opts.Page != 0 {
l.Page = opts.Page
}
if opts.PerPage != 0 {
l.PerPage = opts.PerPage
}
if opts.Draft {
l.WIP = gitlab.Ptr("yes")
opts.ListType = "search"
}
if opts.NotDraft {
l.WIP = gitlab.Ptr("no")
opts.ListType = "search"
}
if opts.Mine {
l.Scope = gitlab.Ptr("assigned_to_me")
opts.ListType = "search"
}
if opts.OrderBy != "" {
l.OrderBy = gitlab.Ptr(opts.OrderBy)
opts.ListType = "search"
}
if opts.Sort != "" {
l.Sort = gitlab.Ptr(opts.Sort)
}
assigneeIds := make([]int, 0)
if len(opts.Assignee) > 0 {
users, err := api.UsersByNames(apiClient, opts.Assignee)
if err != nil {
return err
}
for _, user := range users {
assigneeIds = append(assigneeIds, user.ID)
}
}
reviewerIds := make([]int, 0)
if len(opts.Reviewer) > 0 {
users, err := api.UsersByNames(apiClient, opts.Reviewer)
if err != nil {
return err
}
for _, user := range users {
reviewerIds = append(reviewerIds, user.ID)
}
}
title := utils.NewListTitle(opts.TitleQualifier + " merge request")
title.RepoName = repo.FullName()
if opts.Group != "" {
mergeRequests, err = api.ListGroupMRs(apiClient, opts.Group, api.ProjectListMROptionsToGroup(l), api.WithMRAssignees(assigneeIds), api.WithMRReviewers(reviewerIds))
title.RepoName = opts.Group
} else {
mergeRequests, err = api.ListMRs(apiClient, repo.FullName(), l, api.WithMRAssignees(assigneeIds), api.WithMRReviewers(reviewerIds))
}
if err != nil {
return err
}
title.Page = l.Page
title.ListActionType = opts.ListType
title.CurrentPageTotal = len(mergeRequests)
if jsonOutput {
mrListJSON, _ := json.Marshal(mergeRequests)
fmt.Fprintln(opts.IO.StdOut, string(mrListJSON))
} else {
if err = opts.IO.StartPager(); err != nil {
return err
}
defer opts.IO.StopPager()
fmt.Fprintf(opts.IO.StdOut, "%s\n%s\n", title.Describe(), mrutils.DisplayAllMRs(opts.IO, mergeRequests))
}
return nil
}