| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent 8df6de9 commit 59a19ca
3 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -1,6 +1,9 @@ | |||
| 1 | - ############################################## | ||
| 2 | - Project-level merge request approvals settings | ||
| 3 | - ############################################## | ||
| 1 | + ################################ | ||
| 2 | + Merge request approvals settings | ||
| 3 | + ################################ | ||
| 4 | + | ||
| 5 | + Merge request approvals can be defined at the project level or at the merge | ||
| 6 | + request level. | ||
| 4 | 7 | ||
| 5 | 8 | References | |
| 6 | 9 | ---------- | |
@@ -10,21 +13,33 @@ References | |||
| 10 | 13 | + :class:`gitlab.v4.objects.ProjectApproval` | |
| 11 | 14 | + :class:`gitlab.v4.objects.ProjectApprovalManager` | |
| 12 | 15 | + :attr:`gitlab.v4.objects.Project.approvals` | |
| 16 | + + :class:`gitlab.v4.objects.ProjectMergeRequestApproval` | ||
| 17 | + + :class:`gitlab.v4.objects.ProjectMergeRequestApprovalManager` | ||
| 18 | + + :attr:`gitlab.v4.objects.ProjectMergeRequest.approvals` | ||
| 13 | 19 | ||
| 14 | - * GitLab API: https://docs.gitlab.com/ee/api/merge_request_approvals.html#project-level-mr-approvals | ||
| 20 | + * GitLab API: https://docs.gitlab.com/ee/api/merge_request_approvals.html | ||
| 15 | 21 | ||
| 16 | 22 | Examples | |
| 17 | 23 | -------- | |
| 18 | 24 | ||
| 19 | - Get project-level MR approvals settings:: | ||
| 25 | + Get project-level or MR-level MR approvals settings:: | ||
| 26 | + | ||
| 27 | + p_mras = project.approvals.get() | ||
| 28 | + | ||
| 29 | + mr_mras = mr.approvals.get() | ||
| 30 | + | ||
| 31 | + Change project-level or MR-level MR approvals settings:: | ||
| 20 | 32 | ||
| 21 | - mras = project.approvals.get() | ||
| 33 | + p_mras.approvals_before_merge = 2 | ||
| 34 | + p_mras.save() | ||
| 22 | 35 | ||
| 23 | - Change project-level MR approvals settings:: | ||
| 36 | + mr_mras.approvals_before_merge = 2 | ||
| 37 | + mr_mras.save() | ||
| 24 | 38 | ||
| 25 | - mras.approvals_before_merge = 2 | ||
| 26 | - mras.save() | ||
| 39 | + Change project-level or MR-level MR allowed approvers:: | ||
| 27 | 40 | ||
| 28 | - Change project-level MR allowed approvers:: | ||
| 41 | + project.approvals.set_approvers(approver_ids=[105], | ||
| 42 | + approver_group_ids=[653, 654]) | ||
| 29 | 43 | ||
| 30 | - project.approvals.set_approvers(approver_ids = [105], approver_group_ids=[653, 654]) | ||
| 44 | + mr.approvals.set_approvers(approver_ids=[105], | ||
| 45 | + approver_group_ids=[653, 654]) | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -1795,6 +1795,37 @@ class ProjectTagManager(NoUpdateMixin, RESTManager): | |||
| 1795 | 1795 | _create_attrs = (('tag_name', 'ref'), ('message',)) | |
| 1796 | 1796 | ||
| 1797 | 1797 | ||
| 1798 | + class ProjectMergeRequestApproval(SaveMixin, RESTObject): | ||
| 1799 | + _id_attr = None | ||
| 1800 | + | ||
| 1801 | + | ||
| 1802 | + class ProjectMergeRequestApprovalManager(GetWithoutIdMixin, UpdateMixin, | ||
| 1803 | + RESTManager): | ||
| 1804 | + _path = '/projects/%(project_id)s/merge_requests/%(mr_iid)s/approvals' | ||
| 1805 | + _obj_cls = ProjectMergeRequestApproval | ||
| 1806 | + _from_parent_attrs = {'project_id': 'project_id', 'mr_iid': 'iid'} | ||
| 1807 | + _update_attrs = (('approvals_required',), tuple()) | ||
| 1808 | + _update_uses_post = True | ||
| 1809 | + | ||
| 1810 | + @exc.on_http_error(exc.GitlabUpdateError) | ||
| 1811 | + def set_approvers(self, approver_ids=[], approver_group_ids=[], **kwargs): | ||
| 1812 | + """Change MR-level allowed approvers and approver groups. | ||
| 1813 | + | ||
| 1814 | + Args: | ||
| 1815 | + approver_ids (list): User IDs that can approve MRs | ||
| 1816 | + approver_group_ids (list): Group IDs whose members can approve MRs | ||
| 1817 | + | ||
| 1818 | + Raises: | ||
| 1819 | + GitlabAuthenticationError: If authentication is not correct | ||
| 1820 | + GitlabUpdateError: If the server failed to perform the request | ||
| 1821 | + """ | ||
| 1822 | + path = '%s/%s/approvers' % (self._parent.manager.path, | ||
| 1823 | + self._parent.get_id()) | ||
| 1824 | + data = {'approver_ids': approver_ids, | ||
| 1825 | + 'approver_group_ids': approver_group_ids} | ||
| 1826 | + self.gitlab.http_put(path, post_data=data, **kwargs) | ||
| 1827 | + | ||
| 1828 | + | ||
| 1798 | 1829 | class ProjectMergeRequestAwardEmoji(ObjectDeleteMixin, RESTObject): | |
| 1799 | 1830 | pass | |
| 1800 | 1831 | ||
@@ -1879,6 +1910,7 @@ class ProjectMergeRequest(SubscribableMixin, TodoMixin, TimeTrackingMixin, | |||
| 1879 | 1910 | _id_attr = 'iid' | |
| 1880 | 1911 | ||
| 1881 | 1912 | _managers = ( | |
| 1913 | + ('approvals', 'ProjectMergeRequestApprovalManager'), | ||
| 1882 | 1914 | ('awardemojis', 'ProjectMergeRequestAwardEmojiManager'), | |
| 1883 | 1915 | ('diffs', 'ProjectMergeRequestDiffManager'), | |
| 1884 | 1916 | ('discussions', 'ProjectMergeRequestDiscussionManager'), | |
@@ -2761,13 +2793,12 @@ class ProjectApprovalManager(GetWithoutIdMixin, UpdateMixin, RESTManager): | |||
| 2761 | 2793 | _update_uses_post = True | |
| 2762 | 2794 | ||
| 2763 | 2795 | @exc.on_http_error(exc.GitlabUpdateError) | |
| 2764 | - def set_approvers(self, approver_ids=[], approver_group_ids=[], | ||
| 2765 | - **kwargs): | ||
| 2796 | + def set_approvers(self, approver_ids=[], approver_group_ids=[], **kwargs): | ||
| 2766 | 2797 | """Change project-level allowed approvers and approver groups. | |
| 2767 | 2798 | ||
| 2768 | 2799 | Args: | |
| 2769 | - approver_ids (list): User IDs that can approve MRs. | ||
| 2770 | - approver_group_ids (list): Group IDs whose members can approve MRs. | ||
| 2800 | + approver_ids (list): User IDs that can approve MRs | ||
| 2801 | + approver_group_ids (list): Group IDs whose members can approve MRs | ||
| 2771 | 2802 | ||
| 2772 | 2803 | Raises: | |
| 2773 | 2804 | GitlabAuthenticationError: If authentication is not correct | |
@@ -2777,10 +2808,7 @@ def set_approvers(self, approver_ids=[], approver_group_ids=[], | |||
| 2777 | 2808 | path = '/projects/%s/approvers' % self._parent.get_id() | |
| 2778 | 2809 | data = {'approver_ids': approver_ids, | |
| 2779 | 2810 | 'approver_group_ids': approver_group_ids} | |
| 2780 | - try: | ||
| 2781 | - self.gitlab.http_put(path, post_data=data, **kwargs) | ||
| 2782 | - except exc.GitlabHttpError as e: | ||
| 2783 | - raise exc.GitlabUpdateError(e.response_code, e.error_message) | ||
| 2811 | + self.gitlab.http_put(path, post_data=data, **kwargs) | ||
| 2784 | 2812 | ||
| 2785 | 2813 | ||
| 2786 | 2814 | class ProjectDeployment(RESTObject): | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -5,6 +5,7 @@ | |||
| 5 | 5 | ||
| 6 | 6 | P1 = 'root/project1' | |
| 7 | 7 | P2 = 'root/project2' | |
| 8 | + MR_P1 = 1 | ||
| 8 | 9 | I_P1 = 1 | |
| 9 | 10 | I_P2 = 1 | |
| 10 | 11 | G1 = 'group1' | |
@@ -26,6 +27,7 @@ def end_log(): | |||
| 26 | 27 | issue_p1 = project1.issues.get(I_P1) | |
| 27 | 28 | issue_p2 = project2.issues.get(I_P2) | |
| 28 | 29 | group1 = gl.groups.get(G1) | |
| 30 | + mr = project1.mergerequests.get(1) | ||
| 29 | 31 | ||
| 30 | 32 | start_log('MR approvals') | |
| 31 | 33 | approval = project1.approvals.get() | |
@@ -37,6 +39,19 @@ def end_log(): | |||
| 37 | 39 | project1.approvals.set_approvers([1], []) | |
| 38 | 40 | approval = project1.approvals.get() | |
| 39 | 41 | assert(approval.approvers[0]['user']['id'] == 1) | |
| 42 | + | ||
| 43 | + approval = mr.approvals.get() | ||
| 44 | + approval.approvals_required = 2 | ||
| 45 | + approval.save() | ||
| 46 | + approval = mr.approvals.get() | ||
| 47 | + assert(approval.approvals_required == 2) | ||
| 48 | + approval.approvals_required = 3 | ||
| 49 | + approval.save() | ||
| 50 | + approval = mr.approvals.get() | ||
| 51 | + assert(approval.approvals_required == 3) | ||
| 52 | + mr.approvals.set_approvers([1], []) | ||
| 53 | + approval = mr.approvals.get() | ||
| 54 | + assert(approval.approvers[0]['user']['id'] == 1) | ||
| 40 | 55 | end_log() | |
| 41 | 56 | ||
| 42 | 57 | start_log('geo nodes') | |
| Back | FazBrowse Home | New Git URL |
0 commit comments