Merge "Only show draft change dependency if current user is owner or reviewer"
This commit is contained in:
@@ -32,6 +32,7 @@ import com.google.gerrit.reviewdb.client.RevId;
|
||||
import com.google.gerrit.reviewdb.server.ReviewDb;
|
||||
import com.google.gerrit.server.AnonymousUser;
|
||||
import com.google.gerrit.server.ChangeUtil;
|
||||
import com.google.gerrit.server.CurrentUser;
|
||||
import com.google.gerrit.server.IdentifiedUser;
|
||||
import com.google.gerrit.server.ProjectUtil;
|
||||
import com.google.gerrit.server.account.AccountInfoCacheFactory;
|
||||
@@ -41,6 +42,7 @@ import com.google.gerrit.server.git.MergeOp;
|
||||
import com.google.gerrit.server.patch.PatchSetInfoNotAvailableException;
|
||||
import com.google.gerrit.server.project.ChangeControl;
|
||||
import com.google.gerrit.server.project.NoSuchChangeException;
|
||||
import com.google.gerrit.server.query.change.ChangeData;
|
||||
import com.google.gerrit.server.workflow.CategoryFunction;
|
||||
import com.google.gerrit.server.workflow.FunctionState;
|
||||
import com.google.gwtorm.server.OrmException;
|
||||
@@ -252,6 +254,15 @@ public class ChangeDetailFactory extends Handler<ChangeDetail> {
|
||||
detail.setApprovals(ad.values());
|
||||
}
|
||||
|
||||
private boolean isReviewer(Change change) {
|
||||
// Return true if the currently logged in user is a reviewer of the change.
|
||||
try {
|
||||
return control.isReviewer(db, new ChangeData(change));
|
||||
} catch (OrmException e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private void loadCurrentPatchSet() throws OrmException,
|
||||
NoSuchEntityException, PatchSetInfoNotAvailableException,
|
||||
NoSuchChangeException {
|
||||
@@ -292,11 +303,21 @@ public class ChangeDetailFactory extends Handler<ChangeDetail> {
|
||||
final Map<Change.Id, Change> m =
|
||||
db.changes().toMap(db.changes().get(changesToGet));
|
||||
|
||||
final CurrentUser currentUser = control.getCurrentUser();
|
||||
Account.Id currentUserId = null;
|
||||
if (currentUser instanceof IdentifiedUser) {
|
||||
currentUserId = ((IdentifiedUser) currentUser).getAccountId();
|
||||
}
|
||||
|
||||
final ArrayList<ChangeInfo> dependsOn = new ArrayList<ChangeInfo>();
|
||||
for (final Change.Id a : ancestorOrder) {
|
||||
final Change ac = m.get(a);
|
||||
if (ac != null && ac.getProject().equals(detail.getChange().getProject())) {
|
||||
dependsOn.add(newChangeInfo(ac, ancestorPatchIds));
|
||||
if (ac.getStatus().getCode() != Change.STATUS_DRAFT
|
||||
|| ac.getOwner().equals(currentUserId)
|
||||
|| isReviewer(ac)) {
|
||||
dependsOn.add(newChangeInfo(ac, ancestorPatchIds));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -304,7 +325,11 @@ public class ChangeDetailFactory extends Handler<ChangeDetail> {
|
||||
for (final PatchSet.Id a : descendants) {
|
||||
final Change ac = m.get(a.getParentKey());
|
||||
if (ac != null && ac.currentPatchSetId().equals(a)) {
|
||||
neededBy.add(newChangeInfo(ac, null));
|
||||
if (ac.getStatus().getCode() != Change.STATUS_DRAFT
|
||||
|| ac.getOwner().equals(currentUserId)
|
||||
|| isReviewer(ac)) {
|
||||
neededBy.add(newChangeInfo(ac, null));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user