diff options
author | Max Wittig <max.wittig@siemens.com> | 2020-02-20 09:06:23 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-02-20 09:06:23 +0100 |
commit | e8f0921d164c4b7db78e2f62e75eb32094b4456e (patch) | |
tree | d603f98235d9bfb6b1968a4e3412bb0d8efe72ba /gitlab | |
parent | 19242c398b9074e04e35cc687c31c543a10db280 (diff) | |
parent | cb436951b1fde9c010e966819c75d0d7adacf17d (diff) | |
download | gitlab-e8f0921d164c4b7db78e2f62e75eb32094b4456e.tar.gz |
Merge pull request #1020 from nejch/feat/revert-commit-api
feat: add support for commit revert API (#991)
Diffstat (limited to 'gitlab')
-rw-r--r-- | gitlab/exceptions.py | 4 | ||||
-rw-r--r-- | gitlab/tests/test_gitlab.py | 44 | ||||
-rw-r--r-- | gitlab/v4/objects.py | 20 |
3 files changed, 68 insertions, 0 deletions
diff --git a/gitlab/exceptions.py b/gitlab/exceptions.py index aff3c87..d6791f2 100644 --- a/gitlab/exceptions.py +++ b/gitlab/exceptions.py @@ -245,6 +245,10 @@ class GitlabRepairError(GitlabOperationError): pass +class GitlabRevertError(GitlabOperationError): + pass + + class GitlabLicenseError(GitlabOperationError): pass diff --git a/gitlab/tests/test_gitlab.py b/gitlab/tests/test_gitlab.py index 3eccf6e..b56889a 100644 --- a/gitlab/tests/test_gitlab.py +++ b/gitlab/tests/test_gitlab.py @@ -794,6 +794,50 @@ class TestGitlab(unittest.TestCase): self.gl.users.get(1, lazy=True).activate() self.gl.users.get(1, lazy=True).deactivate() + def test_commit_revert(self): + @urlmatch( + scheme="http", + netloc="localhost", + path="/api/v4/projects/1/repository/commits/6b2257ea", + method="get", + ) + def resp_get_commit(url, request): + headers = {"content-type": "application/json"} + content = """{ + "id": "6b2257eabcec3db1f59dafbd84935e3caea04235", + "short_id": "6b2257ea", + "title": "Initial commit" + }""" + content = content.encode("utf-8") + return response(200, content, headers, None, 5, request) + + @urlmatch( + scheme="http", + netloc="localhost", + path="/api/v4/projects/1/repository/commits/6b2257ea", + method="post", + ) + def resp_revert_commit(url, request): + headers = {"content-type": "application/json"} + content = """{ + "id": "8b090c1b79a14f2bd9e8a738f717824ff53aebad", + "short_id": "8b090c1b", + "title":"Revert \\"Initial commit\\"" + }""" + content = content.encode("utf-8") + return response(200, content, headers, None, 5, request) + + with HTTMock(resp_get_commit): + project = self.gl.projects.get(1, lazy=True) + commit = project.commits.get("6b2257ea") + self.assertEqual(commit.short_id, "6b2257ea") + self.assertEqual(commit.title, "Initial commit") + + with HTTMock(resp_revert_commit): + revert_commit = commit.revert(branch="master") + self.assertEqual(revert_commit["short_id"], "8b090c1b") + self.assertEqual(revert_commit["title"], 'Revert "Initial commit"') + def test_update_submodule(self): @urlmatch( scheme="http", netloc="localhost", path="/api/v4/projects/1$", method="get" diff --git a/gitlab/v4/objects.py b/gitlab/v4/objects.py index b31870c..83f77d3 100644 --- a/gitlab/v4/objects.py +++ b/gitlab/v4/objects.py @@ -2136,6 +2136,26 @@ class ProjectCommit(RESTObject): path = "%s/%s/merge_requests" % (self.manager.path, self.get_id()) return self.manager.gitlab.http_get(path, **kwargs) + @cli.register_custom_action("ProjectCommit", ("branch",)) + @exc.on_http_error(exc.GitlabRevertError) + def revert(self, branch, **kwargs): + """Revert a commit on a given branch. + + Args: + branch (str): Name of target branch + **kwargs: Extra options to send to the server (e.g. sudo) + + Raises: + GitlabAuthenticationError: If authentication is not correct + GitlabRevertError: If the revert could not be performed + + Returns: + dict: The new commit data (*not* a RESTObject) + """ + path = "%s/%s/revert" % (self.manager.path, self.get_id()) + post_data = {"branch": branch} + return self.manager.gitlab.http_post(path, post_data=post_data, **kwargs) + class ProjectCommitManager(RetrieveMixin, CreateMixin, RESTManager): _path = "/projects/%(project_id)s/repository/commits" |