diff --git a/docs/gl_objects/mr_approvals.rst b/docs/gl_objects/mr_approvals.rst index b5de88c28..253b68db3 100644 --- a/docs/gl_objects/mr_approvals.rst +++ b/docs/gl_objects/mr_approvals.rst @@ -48,13 +48,12 @@ Change project-level or MR-level MR approvals settings:: p_mras.approvals_before_merge = 2 p_mras.save() - mr_mras.approvals_before_merge = 2 - mr_mras.save() + mr_mras.set_approvers(approvals_required = 1) Change project-level or MR-level MR allowed approvers:: project.approvals.set_approvers(approver_ids=[105], approver_group_ids=[653, 654]) - mr.approvals.set_approvers(approver_ids=[105], + mr.approvals.set_approvers(approvals_required = 1, approver_ids=[105], approver_group_ids=[653, 654]) diff --git a/gitlab/v4/objects.py b/gitlab/v4/objects.py index 1750a3641..6b60583fa 100644 --- a/gitlab/v4/objects.py +++ b/gitlab/v4/objects.py @@ -2685,10 +2685,13 @@ class ProjectMergeRequestApprovalManager(GetWithoutIdMixin, UpdateMixin, RESTMan _update_uses_post = True @exc.on_http_error(exc.GitlabUpdateError) - def set_approvers(self, approver_ids=None, approver_group_ids=None, **kwargs): + def set_approvers( + self, approvals_required, approver_ids=None, approver_group_ids=None, **kwargs + ): """Change MR-level allowed approvers and approver groups. Args: + approvals_required (integer): The number of required approvals for this rule approver_ids (list): User IDs that can approve MRs approver_group_ids (list): Group IDs whose members can approve MRs @@ -2699,8 +2702,16 @@ def set_approvers(self, approver_ids=None, approver_group_ids=None, **kwargs): approver_ids = approver_ids or [] approver_group_ids = approver_group_ids or [] - path = "%s/%s/approvers" % (self._parent.manager.path, self._parent.get_id()) - data = {"approver_ids": approver_ids, "approver_group_ids": approver_group_ids} + path = "%s/%s/approval_rules" % ( + self._parent.manager.path, + self._parent.get_id(), + ) + data = { + "approvals_required": approvals_required, + "rule_type": "regular", + "user_ids": approver_ids, + "group_ids": approver_group_ids, + } self.gitlab.http_put(path, post_data=data, **kwargs) diff --git a/tools/ee-test.py b/tools/ee-test.py index 82adf5cc1..af1295788 100755 --- a/tools/ee-test.py +++ b/tools/ee-test.py @@ -37,7 +37,7 @@ def end_log(): approval.save() approval = project1.approvals.get() assert v != approval.reset_approvals_on_push -project1.approvals.set_approvers([1], []) +project1.approvals.set_approvers(1, [1], []) approval = project1.approvals.get() assert approval.approvers[0]["user"]["id"] == 1 @@ -50,7 +50,7 @@ def end_log(): approval.save() approval = mr.approvals.get() assert approval.approvals_required == 3 -mr.approvals.set_approvers([1], []) +mr.approvals.set_approvers(1, [1], []) approval = mr.approvals.get() assert approval.approvers[0]["user"]["id"] == 1