summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/gl_objects/mrs.rst42
-rw-r--r--gitlab/__init__.py1
-rw-r--r--gitlab/v4/objects.py29
3 files changed, 70 insertions, 2 deletions
diff --git a/docs/gl_objects/mrs.rst b/docs/gl_objects/mrs.rst
index ca9b864..02b2e02 100644
--- a/docs/gl_objects/mrs.rst
+++ b/docs/gl_objects/mrs.rst
@@ -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
---------
diff --git a/gitlab/__init__.py b/gitlab/__init__.py
index 1c13093..4b9c4f4 100644
--- a/gitlab/__init__.py
+++ b/gitlab/__init__.py
@@ -114,6 +114,7 @@ class Gitlab(object):
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)
diff --git a/gitlab/v4/objects.py b/gitlab/v4/objects.py
index c266724..7f50440 100644
--- a/gitlab/v4/objects.py
+++ b/gitlab/v4/objects.py
@@ -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):
@@ -842,6 +850,7 @@ class Group(SaveMixin, ObjectDeleteMixin, RESTObject):
('epics', 'GroupEpicManager'),
('issues', 'GroupIssueManager'),
('members', 'GroupMemberManager'),
+ ('mergerequests', 'GroupMergeRequestManager'),
('milestones', 'GroupMilestoneManager'),
('notificationsettings', 'GroupNotificationSettingsManager'),
('projects', 'GroupProjectManager'),
@@ -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'