Skip to content

Commit 4408e76

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 fceeebc commit 4408e76

File tree

4 files changed

+31
-0
lines changed

4 files changed

+31
-0
lines changed

docs/gl_objects/merge_requests.rst

Lines changed: 4 additions & 0 deletions
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

Lines changed: 4 additions & 0 deletions
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

Lines changed: 18 additions & 0 deletions
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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,11 @@ def test_merge_request_rebase(project):
117117
assert mr.rebase()
118118

119119

120+
def test_merge_request_reset_approvals(project):
121+
mr = project.mergerequests.list()[0]
122+
assert mr.reset_approvals()
123+
124+
120125
@pytest.mark.skip(reason="flaky test")
121126
def test_merge_request_merge(project):
122127
mr = project.mergerequests.list()[0]

0 commit comments

Comments
 (0)