From bc4280c2fbff115bd5e29a6f5012ae518610f626 Mon Sep 17 00:00:00 2001 From: Jeroen Schutrup Date: Thu, 11 Jul 2019 16:25:21 +0200 Subject: [PATCH] feat: add mr rebase method --- docs/gl_objects/mrs.rst | 4 ++++ gitlab/exceptions.py | 4 ++++ gitlab/v4/objects.py | 16 ++++++++++++++++ tools/python_test_v4.py | 3 +++ 4 files changed, 27 insertions(+) diff --git a/docs/gl_objects/mrs.rst b/docs/gl_objects/mrs.rst index b3b5e072f..a3e3fa027 100644 --- a/docs/gl_objects/mrs.rst +++ b/docs/gl_objects/mrs.rst @@ -181,3 +181,7 @@ Reset spent time for a merge request:: Get user agent detail for the issue (admin only):: detail = issue.user_agent_detail() + +Attempt to rebase an MR:: + + mr.rebase() diff --git a/gitlab/exceptions.py b/gitlab/exceptions.py index 449b6f02c..d644e0ffe 100644 --- a/gitlab/exceptions.py +++ b/gitlab/exceptions.py @@ -173,6 +173,10 @@ class GitlabMRApprovalError(GitlabOperationError): pass +class GitlabMRRebaseError(GitlabOperationError): + pass + + class GitlabMRClosedError(GitlabOperationError): pass diff --git a/gitlab/v4/objects.py b/gitlab/v4/objects.py index f452aa780..770b3e095 100644 --- a/gitlab/v4/objects.py +++ b/gitlab/v4/objects.py @@ -2712,6 +2712,22 @@ def unapprove(self, **kwargs): server_data = self.manager.gitlab.http_post(path, post_data=data, **kwargs) self._update_attrs(server_data) + @cli.register_custom_action("ProjectMergeRequest") + @exc.on_http_error(exc.GitlabMRRebaseError) + def rebase(self, **kwargs): + """Attempt to rebase the source branch onto the target branch + + Args: + **kwargs: Extra options to send to the server (e.g. sudo) + + Raises: + GitlabAuthenticationError: If authentication is not correct + GitlabMRRebaseError: If rebasing failed + """ + path = "%s/%s/rebase" % (self.manager.path, self.get_id()) + data = {} + return self.manager.gitlab.http_put(path, post_data=data, **kwargs) + @cli.register_custom_action( "ProjectMergeRequest", tuple(), diff --git a/tools/python_test_v4.py b/tools/python_test_v4.py index 358f2e409..61fcd4353 100644 --- a/tools/python_test_v4.py +++ b/tools/python_test_v4.py @@ -686,6 +686,9 @@ event = mr.resourcelabelevents.get(events[0].id) assert event +# rebasing +assert mr.rebase() + # basic testing: only make sure that the methods exist mr.commits() mr.changes()