diff --git a/src/main/java/org/gitlab/api/GitlabAPI.java b/src/main/java/org/gitlab/api/GitlabAPI.java index 4c93494a..95031342 100644 --- a/src/main/java/org/gitlab/api/GitlabAPI.java +++ b/src/main/java/org/gitlab/api/GitlabAPI.java @@ -20,6 +20,7 @@ import java.util.Arrays; import java.util.Date; import java.util.List; +import java.util.Collection; import static org.gitlab.api.http.Method.*; @@ -142,6 +143,10 @@ public GitlabHTTPRequestor dispatch() { return new GitlabHTTPRequestor(this).authenticate(apiToken, tokenType, authMethod).method(POST); } + public GitlabHTTPRequestor put() { + return new GitlabHTTPRequestor(this).authenticate(apiToken, tokenType, authMethod).method(PUT); + } + public boolean isIgnoreCertificateErrors() { return ignoreCertificateErrors; } @@ -1477,6 +1482,36 @@ public GitlabMergeRequestApprovals getMergeRequestApprovals(GitlabMergeRequest m return retrieve().to(tailUrl, GitlabMergeRequestApprovals.class); } + /** + * Set the number of required approvers. + * + * EE only. + */ + public GitlabMergeRequestApprovals setMergeRequestApprovals(GitlabMergeRequest mr, int count) throws IOException { + String tailUrl = GitlabProject.URL + "/" + sanitizeProjectId(mr.getProjectId()) + + GitlabMergeRequest.URL + "/" + mr.getIid() + GitlabMergeRequestApprovals.URL; + return dispatch() + .with("approvals_required", count) + .to(tailUrl, GitlabMergeRequestApprovals.class); + } + + /** + * Set the list of approvers. Important: Approvers and groups not + * in the request will be removed + * + * EE only. + */ + public GitlabMergeRequestApprovals setMergeRequestApprovers(GitlabMergeRequest mr, + Collection userApproverIds, + Collection groupApproverIds) throws IOException { + String tailUrl = GitlabProject.URL + "/" + sanitizeProjectId(mr.getProjectId()) + + GitlabMergeRequest.URL + "/" + mr.getIid() + GitlabMergeRequestApprovals.APPROVERS_URL; + return put() + .with("approver_ids", userApproverIds) + .with("approver_group_ids", groupApproverIds) + .to(tailUrl, GitlabMergeRequestApprovals.class); + } + /** * Cherry picks a commit. * diff --git a/src/main/java/org/gitlab/api/models/GitlabMergeRequestApprovals.java b/src/main/java/org/gitlab/api/models/GitlabMergeRequestApprovals.java index 84069fed..81c6c991 100644 --- a/src/main/java/org/gitlab/api/models/GitlabMergeRequestApprovals.java +++ b/src/main/java/org/gitlab/api/models/GitlabMergeRequestApprovals.java @@ -9,6 +9,7 @@ public class GitlabMergeRequestApprovals { public static final String URL = "/approvals"; + public static final String APPROVERS_URL = "/approvers"; private Integer id; private Integer iid; @@ -39,6 +40,10 @@ public class GitlabMergeRequestApprovals { @JsonProperty("suggested_approvers") private List suggestedApprovers; + private List approvers; + + @JsonProperty("approver_groups") + private List approverGroups; public Integer getId() { return id; @@ -135,7 +140,7 @@ public List getApprovedBy() { public void setApprovedBy(List approvedBy) { this.approvedBy = approvedBy; } - + public List getSuggestedApprovers() { return suggestedApprovers; } @@ -143,4 +148,21 @@ public List getSuggestedApprovers() { public void setSuggestedApprovers(List suggestedApprovers) { this.suggestedApprovers = suggestedApprovers; } + + public List getApprovers() { + return approvers; + } + + public void setApprovers(List approvers) { + this.approvers = approvers; + } + + public List getApproverGroups() { + return approverGroups; + } + + public void setApproverGroups(List approverGroups) { + this.approverGroups = approverGroups; + } + }