Skip to content
Snippets Groups Projects
Commit ac79f78d authored by Filip Aleksic's avatar Filip Aleksic Committed by Shekhar Patnaik
Browse files

feat(mr list): Add sorting functionality for MRs

parent 72870e0e
No related branches found
No related tags found
1 merge request!1856feat(mr list): Add sorting functionality for MRs
......@@ -51,6 +51,10 @@ type ListOptions struct {
ListType string
TitleQualifier string
// sort options
Sort string
OrderBy string
IO *iostreams.IOStreams
BaseRepo func() (glrepo.Interface, error)
HTTPClient func() (*gitlab.Client, error)
......@@ -143,6 +147,8 @@ func NewCmdList(f *cmdutils.Factory, runE func(opts *ListOptions) error) *cobra.
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")
......@@ -234,6 +240,15 @@ func listRun(opts *ListOptions) error {
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)
......
......@@ -647,3 +647,68 @@ func TestMergeRequestList_GroupWithAssigneeAndReviewer(t *testing.T) {
// 2 for users lookup, 2 for merge requests (assignee and reviewer)
assert.Len(t, requests, 4)
}
func TestMergeRequestList_SortAndOrderBy(t *testing.T) {
fakeHTTP := &httpmock.Mocker{
MatchURL: httpmock.PathAndQuerystring,
}
defer fakeHTTP.Verify(t)
fakeHTTP.RegisterResponder(http.MethodGet, "/api/v4/projects/OWNER/REPO/merge_requests?order_by=created_at&page=1&per_page=30&sort=desc&state=opened",
httpmock.NewStringResponse(http.StatusOK, `[
{
"state": "opened",
"description": "a description here",
"project_id": 1,
"updated_at": "2016-01-04T16:00:00.081Z",
"id": 76,
"title": "MergeRequest one",
"created_at": "2016-01-04T16:00:00.081Z",
"iid": 6,
"draft": true,
"labels": ["foo", "bar"],
"target_branch": "master",
"source_branch": "test1",
"web_url": "http://gitlab.com/OWNER/REPO/merge_requests/6",
"references": {
"full": "OWNER/REPO/merge_requests/6",
"relative": "#6",
"short": "#6"
}
},
{
"state": "opened",
"description": "description two here",
"project_id": 1,
"updated_at": "2016-01-04T15:00:00.081Z",
"id": 77,
"title": "MergeRequest two",
"created_at": "2016-01-04T15:00:00.081Z",
"iid": 7,
"draft": true,
"target_branch": "master",
"source_branch": "test2",
"labels": ["fooz", "baz"],
"web_url": "http://gitlab.com/OWNER/REPO/merge_requests/7",
"references": {
"full": "OWNER/REPO/merge_requests/7",
"relative": "#7",
"short": "#7"
}
}
]`))
output, err := runCommand(fakeHTTP, true, "--order created_at --sort desc", nil, "")
if err != nil {
t.Errorf("error running command `mr list`: %v", err)
}
assert.Equal(t, output.Stderr(), "")
assert.Equal(t, heredoc.Doc(`
Showing 2 open merge requests in OWNER/REPO that match your search. (Page 1)
!6 OWNER/REPO/merge_requests/6 MergeRequest one (master) ← (test1)
!7 OWNER/REPO/merge_requests/7 MergeRequest two (master) ← (test2)
`), output.String())
}
......@@ -55,12 +55,14 @@ glab mr list --not-draft
-m, --milestone string Filter merge request by milestone <id>.
--not-draft Filter by non-draft merge requests.
--not-label strings Filter merge requests by not having label <name>.
-o, --order string Order merge requests by <field>. Order options: created_at, title, merged_at or updated_at.
-F, --output string Format output as: text, json. (default "text")
-p, --page int Page number. (default 1)
-P, --per-page int Number of items to list per page. (default 30)
-R, --repo OWNER/REPO Select another repository. Can use either OWNER/REPO or `GROUP/NAMESPACE/REPO` format. Also accepts full URL or Git URL.
-r, --reviewer strings Get only merge requests with users as reviewer.
--search string Filter by <string> in title and description.
-S, --sort string Sort merge requests by <field>. Sort options: asc, desc.
-s, --source-branch string Filter by source branch <name>.
-t, --target-branch string Filter by target branch <name>.
```
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment