diff options
-rw-r--r-- | docs/gl_objects/mrs.rst | 42 | ||||
-rw-r--r-- | gitlab/__init__.py | 1 | ||||
-rw-r--r-- | gitlab/v4/objects.py | 29 |
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' |