in commands/mr/list/mr_list.go [63:164]
func NewCmdList(f *cmdutils.Factory, runE func(opts *ListOptions) error) *cobra.Command {
opts := &ListOptions{
IO: f.IO,
}
mrListCmd := &cobra.Command{
Use: "list [flags]",
Short: `List merge requests.`,
Long: ``,
Aliases: []string{"ls"},
Example: heredoc.Doc(`
$ glab mr list --all
$ glab mr ls -a
$ glab mr list --assignee=@me
$ glab mr list --reviewer=@me
$ glab mr list --source-branch=new-feature
$ glab mr list --target-branch=main
$ glab mr list --search "this adds feature X"
$ glab mr list --label needs-review
$ glab mr list --not-label waiting-maintainer-feedback,subsystem-x
$ glab mr list -M --per-page 10
$ glab mr list --draft
$ glab mr list --not-draft
`),
Args: cobra.ExactArgs(0),
RunE: func(cmd *cobra.Command, args []string) error {
// supports repo override
opts.BaseRepo = f.BaseRepo
opts.HTTPClient = f.HttpClient
if len(opts.Labels) != 0 && len(opts.NotLabels) != 0 {
return cmdutils.FlagError{
Err: errors.New("flags --label and --not-label are mutually exclusive."),
}
}
// check if any of the two or all of states flag are specified
if opts.Closed && opts.Merged {
return cmdutils.FlagError{
Err: errors.New("specify either --closed or --merged. Use --all issues in all states."),
}
}
if opts.All {
opts.State = "all"
} else if opts.Closed {
opts.State = "closed"
opts.TitleQualifier = opts.State
} else if opts.Merged {
opts.State = "merged"
opts.TitleQualifier = opts.State
} else {
opts.State = "opened"
opts.TitleQualifier = "open"
}
group, err := flag.GroupOverride(cmd)
if err != nil {
return err
}
opts.Group = group
if runE != nil {
return runE(opts)
}
return listRun(opts)
},
}
cmdutils.EnableRepoOverride(mrListCmd, f)
mrListCmd.Flags().StringSliceVarP(&opts.Labels, "label", "l", []string{}, "Filter merge request by label <name>.")
mrListCmd.Flags().StringSliceVar(&opts.NotLabels, "not-label", []string{}, "Filter merge requests by not having label <name>.")
mrListCmd.Flags().StringVar(&opts.Author, "author", "", "Filter merge request by author <username>.")
mrListCmd.Flags().StringVarP(&opts.Milestone, "milestone", "m", "", "Filter merge request by milestone <id>.")
mrListCmd.Flags().StringVarP(&opts.SourceBranch, "source-branch", "s", "", "Filter by source branch <name>.")
mrListCmd.Flags().StringVarP(&opts.TargetBranch, "target-branch", "t", "", "Filter by target branch <name>.")
mrListCmd.Flags().StringVar(&opts.Search, "search", "", "Filter by <string> in title and description.")
mrListCmd.Flags().BoolVarP(&opts.All, "all", "A", false, "Get all merge requests.")
mrListCmd.Flags().BoolVarP(&opts.Closed, "closed", "c", false, "Get only closed merge requests.")
mrListCmd.Flags().BoolVarP(&opts.Merged, "merged", "M", false, "Get only merged merge requests.")
mrListCmd.Flags().BoolVarP(&opts.Draft, "draft", "d", false, "Filter by draft merge requests.")
mrListCmd.Flags().BoolVarP(&opts.NotDraft, "not-draft", "", false, "Filter by non-draft merge requests.")
mrListCmd.Flags().StringVarP(&opts.OutputFormat, "output", "F", "text", "Format output as: text, json.")
mrListCmd.Flags().IntVarP(&opts.Page, "page", "p", 1, "Page number.")
mrListCmd.Flags().IntVarP(&opts.PerPage, "per-page", "P", 30, "Number of items to list per page.")
mrListCmd.Flags().StringSliceVarP(&opts.Assignee, "assignee", "a", []string{}, "Get only merge requests assigned to users.")
mrListCmd.Flags().StringSliceVarP(&opts.Reviewer, "reviewer", "r", []string{}, "Get only merge requests with users as reviewer.")
mrListCmd.Flags().StringVarP(&opts.Sort, "sort", "S", "", "Sort merge requests by <field>. Sort options: asc, desc.")
mrListCmd.Flags().StringVarP(&opts.OrderBy, "order", "o", "", "Order merge requests by <field>. Order options: created_at, title, merged_at or updated_at.")
mrListCmd.Flags().BoolP("opened", "O", false, "Get only open merge requests.")
_ = mrListCmd.Flags().MarkHidden("opened")
_ = mrListCmd.Flags().MarkDeprecated("opened", "default value if neither --closed, --locked or --merged is used.")
mrListCmd.Flags().BoolVarP(&opts.Mine, "mine", "", false, "Get only merge requests assigned to me.")
_ = mrListCmd.Flags().MarkHidden("mine")
_ = mrListCmd.Flags().MarkDeprecated("mine", "use --assignee=@me.")
mrListCmd.PersistentFlags().StringP("group", "g", "", "Select a group/subgroup. This option is ignored if a repo argument is set.")
mrListCmd.MarkFlagsMutuallyExclusive("draft", "not-draft")
return mrListCmd
}