Merge branch 'stable-2.14' into stable-2.15
* stable-2.14:
Do not assign reviewers that cannot see the change
Change-Id: Id9e193d08c34d5779e2ff2154c89d20142afa42b
diff --git a/owners-autoassign/src/main/java/com/vmware/gerrit/owners/common/ReviewerManager.java b/owners-autoassign/src/main/java/com/vmware/gerrit/owners/common/ReviewerManager.java
index 76e16fa..c30fca9 100644
--- a/owners-autoassign/src/main/java/com/vmware/gerrit/owners/common/ReviewerManager.java
+++ b/owners-autoassign/src/main/java/com/vmware/gerrit/owners/common/ReviewerManager.java
@@ -23,6 +23,10 @@
import com.google.gerrit.extensions.common.ChangeInfo;
import com.google.gerrit.extensions.restapi.RestApiException;
import com.google.gerrit.reviewdb.client.Account;
+import com.google.gerrit.reviewdb.client.Account.Id;
+import com.google.gerrit.server.IdentifiedUser;
+import com.google.gerrit.server.change.ChangesCollection;
+import com.google.gerrit.server.project.ChangeControl;
import com.google.gerrit.server.util.ManualRequestContext;
import com.google.gerrit.server.util.OneOffRequestContext;
import com.google.gwtorm.server.OrmException;
@@ -39,11 +43,19 @@
private final OneOffRequestContext requestContext;
private final GerritApi gApi;
+ private final IdentifiedUser.GenericFactory userFactory;
+ private final ChangesCollection changes;
@Inject
- public ReviewerManager(OneOffRequestContext requestContext, GerritApi gApi) {
+ public ReviewerManager(
+ OneOffRequestContext requestContext,
+ GerritApi gApi,
+ IdentifiedUser.GenericFactory userFactory,
+ ChangesCollection changes) {
this.requestContext = requestContext;
this.gApi = gApi;
+ this.userFactory = userFactory;
+ this.changes = changes;
}
public void addReviewers(ChangeApi cApi, Collection<Account.Id> reviewers)
@@ -52,20 +64,32 @@
ChangeInfo changeInfo = cApi.get();
try (ManualRequestContext ctx =
requestContext.openAs(new Account.Id(changeInfo.owner._accountId))) {
+ ChangeControl changeControl = changes.parse(change.getId()).getControl();
// TODO(davido): Switch back to using changes API again,
// when it supports batch mode for adding reviewers
ReviewInput in = new ReviewInput();
in.reviewers = new ArrayList<>(reviewers.size());
for (Account.Id account : reviewers) {
- AddReviewerInput addReviewerInput = new AddReviewerInput();
- addReviewerInput.reviewer = account.toString();
- in.reviewers.add(addReviewerInput);
+ if (isVisibleTo(changeControl, account)) {
+ AddReviewerInput addReviewerInput = new AddReviewerInput();
+ addReviewerInput.reviewer = account.toString();
+ in.reviewers.add(addReviewerInput);
+ } else {
+ log.warn(
+ "Not adding account {} as reviewer to change {} because the associated ref is not visible",
+ account,
+ change.getId());
+ }
+ gApi.changes().id(changeInfo.id).current().review(in);
}
- gApi.changes().id(changeInfo.id).current().review(in);
}
} catch (RestApiException | OrmException e) {
log.error("Couldn't add reviewers to the change", e);
throw new ReviewerManagerException(e);
}
}
+
+ private boolean isVisibleTo(ChangeControl changeControl, Id account) {
+ return changeControl.forUser(userFactory.create(account)).isRefVisible();
+ }
}