summaryrefslogtreecommitdiffstats
path: root/gerrit-server/src/main/java/com/google/gerrit/server/change/DeleteAssignee.java
diff options
context:
space:
mode:
Diffstat (limited to 'gerrit-server/src/main/java/com/google/gerrit/server/change/DeleteAssignee.java')
-rw-r--r--gerrit-server/src/main/java/com/google/gerrit/server/change/DeleteAssignee.java26
1 files changed, 14 insertions, 12 deletions
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/DeleteAssignee.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/DeleteAssignee.java
index b8556d6451..d3feb31c36 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/change/DeleteAssignee.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/DeleteAssignee.java
@@ -16,10 +16,8 @@ package com.google.gerrit.server.change;
import com.google.gerrit.common.TimeUtil;
import com.google.gerrit.extensions.common.AccountInfo;
-import com.google.gerrit.extensions.restapi.AuthException;
import com.google.gerrit.extensions.restapi.Response;
import com.google.gerrit.extensions.restapi.RestApiException;
-import com.google.gerrit.extensions.restapi.RestModifyView;
import com.google.gerrit.reviewdb.client.Account;
import com.google.gerrit.reviewdb.client.Change;
import com.google.gerrit.reviewdb.client.ChangeMessage;
@@ -30,10 +28,14 @@ import com.google.gerrit.server.account.AccountLoader;
import com.google.gerrit.server.change.DeleteAssignee.Input;
import com.google.gerrit.server.extensions.events.AssigneeChanged;
import com.google.gerrit.server.notedb.ChangeUpdate;
+import com.google.gerrit.server.permissions.ChangePermission;
+import com.google.gerrit.server.permissions.PermissionBackendException;
import com.google.gerrit.server.update.BatchUpdate;
import com.google.gerrit.server.update.BatchUpdateOp;
import com.google.gerrit.server.update.ChangeContext;
import com.google.gerrit.server.update.Context;
+import com.google.gerrit.server.update.RetryHelper;
+import com.google.gerrit.server.update.RetryingRestModifyView;
import com.google.gerrit.server.update.UpdateException;
import com.google.gwtorm.server.OrmException;
import com.google.inject.Inject;
@@ -41,10 +43,10 @@ import com.google.inject.Provider;
import com.google.inject.Singleton;
@Singleton
-public class DeleteAssignee implements RestModifyView<ChangeResource, Input> {
+public class DeleteAssignee
+ extends RetryingRestModifyView<ChangeResource, Input, Response<AccountInfo>> {
public static class Input {}
- private final BatchUpdate.Factory batchUpdateFactory;
private final ChangeMessagesUtil cmUtil;
private final Provider<ReviewDb> db;
private final AssigneeChanged assigneeChanged;
@@ -53,13 +55,13 @@ public class DeleteAssignee implements RestModifyView<ChangeResource, Input> {
@Inject
DeleteAssignee(
- BatchUpdate.Factory batchUpdateFactory,
+ RetryHelper retryHelper,
ChangeMessagesUtil cmUtil,
Provider<ReviewDb> db,
AssigneeChanged assigneeChanged,
IdentifiedUser.GenericFactory userFactory,
AccountLoader.Factory accountLoaderFactory) {
- this.batchUpdateFactory = batchUpdateFactory;
+ super(retryHelper);
this.cmUtil = cmUtil;
this.db = db;
this.assigneeChanged = assigneeChanged;
@@ -68,10 +70,13 @@ public class DeleteAssignee implements RestModifyView<ChangeResource, Input> {
}
@Override
- public Response<AccountInfo> apply(ChangeResource rsrc, Input input)
- throws RestApiException, UpdateException, OrmException {
+ protected Response<AccountInfo> applyImpl(
+ BatchUpdate.Factory updateFactory, ChangeResource rsrc, Input input)
+ throws RestApiException, UpdateException, OrmException, PermissionBackendException {
+ rsrc.permissions().check(ChangePermission.EDIT_ASSIGNEE);
+
try (BatchUpdate bu =
- batchUpdateFactory.create(db.get(), rsrc.getProject(), rsrc.getUser(), TimeUtil.nowTs())) {
+ updateFactory.create(db.get(), rsrc.getProject(), rsrc.getUser(), TimeUtil.nowTs())) {
Op op = new Op();
bu.addOp(rsrc.getChange().getId(), op);
bu.execute();
@@ -88,9 +93,6 @@ public class DeleteAssignee implements RestModifyView<ChangeResource, Input> {
@Override
public boolean updateChange(ChangeContext ctx) throws RestApiException, OrmException {
- if (!ctx.getControl().canEditAssignee()) {
- throw new AuthException("Delete Assignee not permitted");
- }
change = ctx.getChange();
ChangeUpdate update = ctx.getUpdate(change.currentPatchSetId());
Account.Id currentAssigneeId = change.getAssignee();