Skip to content

Commit

Permalink
Support group and global MR listing
Browse files Browse the repository at this point in the history
Closes #553
  • Loading branch information
Gauvain Pocentek committed Jul 15, 2018
1 parent 3461904 commit 0379efa
Show file tree
Hide file tree
Showing 3 changed files with 70 additions and 2 deletions.
42 changes: 42 additions & 0 deletions docs/gl_objects/mrs.rst
Expand Up @@ -5,6 +5,48 @@ Merge requests
You can use merge requests to notify a project that a branch is ready for
merging. The owner of the target projet can accept the merge request.

Merge requests are linked to projects, but they can be listed globally or for
groups.

Group and global listing
========================

Reference
---------

* v4 API:

+ :class:`gitlab.v4.objects.GroupMergeRequest`
+ :class:`gitlab.v4.objects.GroupMergeRequestManager`
+ :attr:`gitlab.v4.objects.Group.mergerequests`
+ :class:`gitlab.v4.objects.MergeRequest`
+ :class:`gitlab.v4.objects.MergeRequestManager`
+ :attr:`gitlab.Gtilab.mergerequests`

* GitLab API: https://docs.gitlab.com/ce/api/merge_requests.html

Examples
--------

List the merge requests available on the GitLab server::

mrs = gl.mergerequests.list()

List the merge requests for a group::

group = gl.groups.get('mygroup')
mrs = group.mergerequests.list()

To edit or delete a merge request, create a ``ProjectMergeRequest`` object
first::

mr = group.mergerequests.list()[0] # pick the first MR
project = gl.projects.get(mr.project_id, lazy=True)
editable_mr = project.mergerequests.get(mr.iid)

Project merge requests
======================

Reference
---------

Expand Down
1 change: 1 addition & 0 deletions gitlab/__init__.py
Expand Up @@ -114,6 +114,7 @@ def __init__(self, url, private_token=None, oauth_token=None, email=None,
self.ldapgroups = objects.LDAPGroupManager(self)
self.licenses = objects.LicenseManager(self)
self.namespaces = objects.NamespaceManager(self)
self.mergerequests = objects.MergeRequestManager(self)
self.notificationsettings = objects.NotificationSettingsManager(self)
self.projects = objects.ProjectManager(self)
self.runners = objects.RunnerManager(self)
Expand Down
29 changes: 27 additions & 2 deletions gitlab/v4/objects.py
Expand Up @@ -710,8 +710,16 @@ class GroupMergeRequest(RESTObject):
pass


class GroupMergeRequestManager(RESTManager):
pass
class GroupMergeRequestManager(ListMixin, RESTManager):
_path = '/groups/%(group_id)s/merge_requests'
_obj_cls = GroupMergeRequest
_from_parent_attrs = {'group_id': 'id'}
_list_filters = ('state', 'order_by', 'sort', 'milestone', 'view',
'labels', 'created_after', 'created_before',
'updated_after', 'updated_before', 'scope', 'author_id',
'assignee_id', 'my_reaction_emoji', 'source_branch',
'target_branch', 'search')
_types = {'labels': types.ListAttribute}


class GroupMilestone(SaveMixin, ObjectDeleteMixin, RESTObject):
Expand Down Expand Up @@ -842,6 +850,7 @@ class Group(SaveMixin, ObjectDeleteMixin, RESTObject):
('epics', 'GroupEpicManager'),
('issues', 'GroupIssueManager'),
('members', 'GroupMemberManager'),
('mergerequests', 'GroupMergeRequestManager'),
('milestones', 'GroupMilestoneManager'),
('notificationsettings', 'GroupNotificationSettingsManager'),
('projects', 'GroupProjectManager'),
Expand Down Expand Up @@ -1040,6 +1049,22 @@ class LicenseManager(RetrieveMixin, RESTManager):
_optional_get_attrs = ('project', 'fullname')


class MergeRequest(RESTObject):
pass


class MergeRequestManager(ListMixin, RESTManager):
_path = '/merge_requests'
_obj_cls = MergeRequest
_from_parent_attrs = {'group_id': 'id'}
_list_filters = ('state', 'order_by', 'sort', 'milestone', 'view',
'labels', 'created_after', 'created_before',
'updated_after', 'updated_before', 'scope', 'author_id',
'assignee_id', 'my_reaction_emoji', 'source_branch',
'target_branch', 'search')
_types = {'labels': types.ListAttribute}


class Snippet(UserAgentDetailMixin, SaveMixin, ObjectDeleteMixin, RESTObject):
_short_print_attr = 'title'

Expand Down

0 comments on commit 0379efa

Please sign in to comment.