diff options
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.java | 26 |
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(); |