Skip to content

Commit 88693ff

Browse files
zampierilucasnejch
authored andcommitted
feat: Add reset_approvals api
Added the newly added reset_approvals merge request api. Signed-off-by: Lucas Zampieri <lzampier@redhat.com>
1 parent 1714d0a commit 88693ff

File tree

4 files changed

+35
-0
lines changed

4 files changed

+35
-0
lines changed

docs/gl_objects/merge_requests.rst

+4
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,10 @@ Attempt to rebase an MR::
189189

190190
mr.rebase()
191191

192+
Clear all approvals of a merge request (possible with project or group access tokens only)::
193+
194+
mr.reset_approvals()
195+
192196
Get status of a rebase for an MR::
193197

194198
mr = project.mergerequests.get(mr_id, include_rebase_in_progress=True)

gitlab/exceptions.py

+4
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,10 @@ class GitlabMRRebaseError(GitlabOperationError):
205205
pass
206206

207207

208+
class GitlabMRResetApprovalError(GitlabOperationError):
209+
pass
210+
211+
208212
class GitlabMRClosedError(GitlabOperationError):
209213
pass
210214

gitlab/v4/objects/merge_requests.py

+18
Original file line numberDiff line numberDiff line change
@@ -327,6 +327,24 @@ def rebase(self, **kwargs: Any) -> Union[Dict[str, Any], requests.Response]:
327327
data: Dict[str, Any] = {}
328328
return self.manager.gitlab.http_put(path, post_data=data, **kwargs)
329329

330+
@cli.register_custom_action("ProjectMergeRequest")
331+
@exc.on_http_error(exc.GitlabMRResetApprovalError)
332+
def reset_approvals(
333+
self, **kwargs: Any
334+
) -> Union[Dict[str, Any], requests.Response]:
335+
"""Clear all approvals of the merge request.
336+
337+
Args:
338+
**kwargs: Extra options to send to the server (e.g. sudo)
339+
340+
Raises:
341+
GitlabAuthenticationError: If authentication is not correct
342+
GitlabMRResetApprovalError: If reset approval failed
343+
"""
344+
path = f"{self.manager.path}/{self.encoded_id}/reset_approvals"
345+
data: Dict[str, Any] = {}
346+
return self.manager.gitlab.http_put(path, post_data=data, **kwargs)
347+
330348
@cli.register_custom_action("ProjectMergeRequest")
331349
@exc.on_http_error(exc.GitlabGetError)
332350
def merge_ref(self, **kwargs: Any) -> Union[Dict[str, Any], requests.Response]:

tests/functional/api/test_merge_requests.py

+9
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,15 @@ def test_merge_request_rebase(project):
117117
assert mr.rebase()
118118

119119

120+
def test_merge_request_reset_approvals(gitlab_url, project):
121+
bot = project.access_tokens.create({"name": "bot", "scopes": ["api"]})
122+
bot_gitlab = gitlab.Gitlab(gitlab_url, private_token=bot.token)
123+
bot_project = bot_gitlab.projects.get(project.id, lazy=True)
124+
125+
mr = bot_project.mergerequests.list()[0]
126+
assert mr.reset_approvals()
127+
128+
120129
@pytest.mark.skip(reason="flaky test")
121130
def test_merge_request_merge(project):
122131
mr = project.mergerequests.list()[0]

0 commit comments

Comments
 (0)