summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEdwin Kempin <ekempin@google.com>2018-03-23 21:21:18 +0000
committerPaladox <thomasmulhall410@yahoo.com>2018-03-23 21:41:22 +0000
commit18c918fcd50b1d3a56698cf8f27a2e446faf3bbe (patch)
tree885d0b73a4168711f7527be7363269dce2204e0d
parent0f9ae13ad2153ab018875db38f45d0531be01b5c (diff)
Allow admins to toggle the WIP flag on all changes
Sometimes this can be useful, e.g. if one developers starts a WIP change, goes to vacation and another developer makes the change ready. At the moment the WIP flag cannot be removed by anyone else than the change owner. Change-Id: I4878f066b633b349dbfe927480ebb143539bf4d3
-rw-r--r--gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/change/ChangeIT.java23
-rw-r--r--gerrit-server/src/main/java/com/google/gerrit/server/change/SetReadyForReview.java19
-rw-r--r--gerrit-server/src/main/java/com/google/gerrit/server/change/SetWorkInProgress.java19
3 files changed, 55 insertions, 6 deletions
diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/change/ChangeIT.java b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/change/ChangeIT.java
index 47adba1551..62c03a02d1 100644
--- a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/change/ChangeIT.java
+++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/change/ChangeIT.java
@@ -405,6 +405,17 @@ public class ChangeIT extends AbstractDaemonTest {
}
@Test
+ public void setWorkInProgressAllowedAsAdmin() throws Exception {
+ setApiUser(user);
+ String changeId =
+ gApi.changes().create(new ChangeInput(project.get(), "master", "Test Change")).get().id;
+
+ setApiUser(admin);
+ gApi.changes().id(changeId).setWorkInProgress();
+ assertThat(gApi.changes().id(changeId).get().workInProgress).isTrue();
+ }
+
+ @Test
public void setReadyForReviewNotAllowedWithoutPermission() throws Exception {
PushOneCommit.Result rready = createChange();
String changeId = rready.getChangeId();
@@ -417,6 +428,18 @@ public class ChangeIT extends AbstractDaemonTest {
}
@Test
+ public void setReadyForReviewAllowedAsAdmin() throws Exception {
+ setApiUser(user);
+ String changeId =
+ gApi.changes().create(new ChangeInput(project.get(), "master", "Test Change")).get().id;
+ gApi.changes().id(changeId).setWorkInProgress();
+
+ setApiUser(admin);
+ gApi.changes().id(changeId).setReadyForReview();
+ assertThat(gApi.changes().id(changeId).get().workInProgress).isNull();
+ }
+
+ @Test
public void hasReviewStarted() throws Exception {
PushOneCommit.Result r = createWorkInProgressChange();
String changeId = r.getChangeId();
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/SetReadyForReview.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/SetReadyForReview.java
index 3d258c3ba4..3c833761b3 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/change/SetReadyForReview.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/SetReadyForReview.java
@@ -24,7 +24,11 @@ import com.google.gerrit.reviewdb.client.Change;
import com.google.gerrit.reviewdb.client.Change.Status;
import com.google.gerrit.reviewdb.server.ReviewDb;
import com.google.gerrit.server.ChangeUtil;
+import com.google.gerrit.server.CurrentUser;
import com.google.gerrit.server.change.WorkInProgressOp.Input;
+import com.google.gerrit.server.permissions.GlobalPermission;
+import com.google.gerrit.server.permissions.PermissionBackend;
+import com.google.gerrit.server.permissions.PermissionBackendException;
import com.google.gerrit.server.update.BatchUpdate;
import com.google.gerrit.server.update.RetryHelper;
import com.google.gerrit.server.update.RetryingRestModifyView;
@@ -38,21 +42,30 @@ public class SetReadyForReview extends RetryingRestModifyView<ChangeResource, In
implements UiAction<ChangeResource> {
private final WorkInProgressOp.Factory opFactory;
private final Provider<ReviewDb> db;
+ private final Provider<CurrentUser> self;
+ private final PermissionBackend permissionBackend;
@Inject
SetReadyForReview(
- RetryHelper retryHelper, WorkInProgressOp.Factory opFactory, Provider<ReviewDb> db) {
+ RetryHelper retryHelper,
+ WorkInProgressOp.Factory opFactory,
+ Provider<ReviewDb> db,
+ Provider<CurrentUser> self,
+ PermissionBackend permissionBackend) {
super(retryHelper);
this.opFactory = opFactory;
this.db = db;
+ this.self = self;
+ this.permissionBackend = permissionBackend;
}
@Override
protected Response<?> applyImpl(
BatchUpdate.Factory updateFactory, ChangeResource rsrc, Input input)
- throws RestApiException, UpdateException {
+ throws RestApiException, UpdateException, PermissionBackendException {
Change change = rsrc.getChange();
- if (!rsrc.isUserOwner()) {
+ if (!rsrc.isUserOwner()
+ && !permissionBackend.user(self).test(GlobalPermission.ADMINISTRATE_SERVER)) {
throw new AuthException("not allowed to set ready for review");
}
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/SetWorkInProgress.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/SetWorkInProgress.java
index 565f67fd92..5dcb602597 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/change/SetWorkInProgress.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/SetWorkInProgress.java
@@ -24,7 +24,11 @@ import com.google.gerrit.reviewdb.client.Change;
import com.google.gerrit.reviewdb.client.Change.Status;
import com.google.gerrit.reviewdb.server.ReviewDb;
import com.google.gerrit.server.ChangeUtil;
+import com.google.gerrit.server.CurrentUser;
import com.google.gerrit.server.change.WorkInProgressOp.Input;
+import com.google.gerrit.server.permissions.GlobalPermission;
+import com.google.gerrit.server.permissions.PermissionBackend;
+import com.google.gerrit.server.permissions.PermissionBackendException;
import com.google.gerrit.server.update.BatchUpdate;
import com.google.gerrit.server.update.RetryHelper;
import com.google.gerrit.server.update.RetryingRestModifyView;
@@ -38,21 +42,30 @@ public class SetWorkInProgress extends RetryingRestModifyView<ChangeResource, In
implements UiAction<ChangeResource> {
private final WorkInProgressOp.Factory opFactory;
private final Provider<ReviewDb> db;
+ private final Provider<CurrentUser> self;
+ private final PermissionBackend permissionBackend;
@Inject
SetWorkInProgress(
- WorkInProgressOp.Factory opFactory, RetryHelper retryHelper, Provider<ReviewDb> db) {
+ WorkInProgressOp.Factory opFactory,
+ RetryHelper retryHelper,
+ Provider<ReviewDb> db,
+ Provider<CurrentUser> self,
+ PermissionBackend permissionBackend) {
super(retryHelper);
this.opFactory = opFactory;
this.db = db;
+ this.self = self;
+ this.permissionBackend = permissionBackend;
}
@Override
protected Response<?> applyImpl(
BatchUpdate.Factory updateFactory, ChangeResource rsrc, Input input)
- throws RestApiException, UpdateException {
+ throws RestApiException, UpdateException, PermissionBackendException {
Change change = rsrc.getChange();
- if (!rsrc.isUserOwner()) {
+ if (!rsrc.isUserOwner()
+ && !permissionBackend.user(self).test(GlobalPermission.ADMINISTRATE_SERVER)) {
throw new AuthException("not allowed to set work in progress");
}