Use BatchUpdate Change I5cdaa7fa5 in Gerrit core removed ChangeUtil#updated in favor of BatchUpdate. Make the necessary adaptations. Change-Id: I3f998f1bdf1edc99de4b5d41ca6a85d69230a43a
diff --git a/src/main/java/com/googlesource/gerrit/plugins/wip/BaseAction.java b/src/main/java/com/googlesource/gerrit/plugins/wip/BaseAction.java index 45536ac..fcb809b 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/wip/BaseAction.java +++ b/src/main/java/com/googlesource/gerrit/plugins/wip/BaseAction.java
@@ -15,7 +15,8 @@ package com.googlesource.gerrit.plugins.wip; import com.google.common.base.Strings; -import com.google.gerrit.extensions.restapi.ResourceConflictException; +import com.google.gerrit.common.TimeUtil; +import com.google.gerrit.extensions.restapi.RestApiException; import com.google.gerrit.reviewdb.client.Change; import com.google.gerrit.reviewdb.client.Change.Status; import com.google.gerrit.reviewdb.client.ChangeMessage; @@ -23,8 +24,9 @@ import com.google.gerrit.server.ChangeUtil; import com.google.gerrit.server.CurrentUser; import com.google.gerrit.server.IdentifiedUser; +import com.google.gerrit.server.git.BatchUpdate; +import com.google.gerrit.server.git.UpdateException; import com.google.gerrit.server.index.ChangeIndexer; -import com.google.gwtorm.server.AtomicUpdate; import com.google.gwtorm.server.OrmException; import com.google.inject.Inject; import com.google.inject.Provider; @@ -40,41 +42,40 @@ private final Provider<ReviewDb> dbProvider; private final Provider<CurrentUser> userProvider; private final ChangeIndexer indexer; + private final BatchUpdate.Factory batchUpdateFactory; @Inject BaseAction(Provider<ReviewDb> dbProvider, Provider<CurrentUser> userProvider, - ChangeIndexer indexer) { + ChangeIndexer indexer, + BatchUpdate.Factory batchUpdateFactory) { this.dbProvider = dbProvider; this.userProvider = userProvider; this.indexer = indexer; + this.batchUpdateFactory = batchUpdateFactory; } protected void changeStatus(Change change, Input input, final Status from, - final Status to) throws OrmException, ResourceConflictException, - IOException { + final Status to) throws OrmException, RestApiException, + IOException, UpdateException { ReviewDb db = dbProvider.get(); Change.Id changeId = change.getId(); db.changes().beginTransaction(changeId); - try { - change = db.changes().atomicUpdate( - changeId, - new AtomicUpdate<Change>() { - @Override - public Change update(Change change) { - if (change.getStatus() == from) { - change.setStatus(to); - ChangeUtil.updated(change); - return change; - } - return null; + try (BatchUpdate bu = batchUpdateFactory.create( + db, change.getProject(), userProvider.get(), TimeUtil.nowTs())) { + bu.addOp(change.getId(), new BatchUpdate.Op() { + @Override + public boolean updateChange(BatchUpdate.ChangeContext ctx) { + Change change = ctx.getChange(); + if (change.getStatus() == from) { + change.setStatus(to); + ctx.saveChange(); + return true; } - }); - - if (change == null) { - throw new ResourceConflictException("change is " - + status(db.changes().get(changeId))); - } + return false; + } + }); + bu.execute(); db.changeMessages().insert(Collections.singleton( newMessage(input, change)));
diff --git a/src/main/java/com/googlesource/gerrit/plugins/wip/ReadyForReview.java b/src/main/java/com/googlesource/gerrit/plugins/wip/ReadyForReview.java index be1c4da..a098a35 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/wip/ReadyForReview.java +++ b/src/main/java/com/googlesource/gerrit/plugins/wip/ReadyForReview.java
@@ -18,6 +18,7 @@ import com.google.gerrit.extensions.restapi.ResourceConflictException; 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.extensions.webui.UiAction; import com.google.gerrit.reviewdb.client.Change; @@ -26,6 +27,8 @@ import com.google.gerrit.reviewdb.server.ReviewDb; import com.google.gerrit.server.CurrentUser; import com.google.gerrit.server.change.RevisionResource; +import com.google.gerrit.server.git.BatchUpdate; +import com.google.gerrit.server.git.UpdateException; import com.google.gerrit.server.index.ChangeIndexer; import com.google.gwtorm.server.OrmException; import com.google.inject.Inject; @@ -38,13 +41,14 @@ @Inject ReadyForReview(Provider<ReviewDb> dbProvider, Provider<CurrentUser> userProvider, - ChangeIndexer indexer) { - super(dbProvider, userProvider, indexer); + ChangeIndexer indexer, + BatchUpdate.Factory batchUpdateFactory) { + super(dbProvider, userProvider, indexer, batchUpdateFactory); } @Override public Object apply(RevisionResource rsrc, Input input) - throws ResourceConflictException, OrmException, IOException { + throws RestApiException, OrmException, IOException, UpdateException { Change change = rsrc.getChange(); if (change.getStatus() != Status.DRAFT) { throw new ResourceConflictException("change is " + status(change));
diff --git a/src/main/java/com/googlesource/gerrit/plugins/wip/SetCommand.java b/src/main/java/com/googlesource/gerrit/plugins/wip/SetCommand.java index 124d5b1..06d0285 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/wip/SetCommand.java +++ b/src/main/java/com/googlesource/gerrit/plugins/wip/SetCommand.java
@@ -15,10 +15,11 @@ package com.googlesource.gerrit.plugins.wip; import com.google.gerrit.extensions.restapi.ResourceConflictException; -import com.google.gerrit.extensions.restapi.ResourceNotFoundException; +import com.google.gerrit.extensions.restapi.RestApiException; import com.google.gerrit.reviewdb.client.PatchSet; import com.google.gerrit.server.change.ChangesCollection; import com.google.gerrit.server.change.RevisionResource; +import com.google.gerrit.server.git.UpdateException; import com.google.gerrit.server.index.ChangeIndexer; import com.google.gerrit.server.project.ProjectControl; import com.google.gerrit.sshd.CommandMetaData; @@ -104,8 +105,8 @@ for (PatchSet patchSet : patchSets) { try { mark(patchSet); - } catch (ResourceConflictException | IOException - | OrmException | ResourceNotFoundException e) { + } catch (RestApiException | IOException + | OrmException | UpdateException e) { ok = false; writeError("fatal: internal server error while approving " + patchSet.getId() + "\n"); @@ -119,7 +120,7 @@ } private void mark(PatchSet patchSet) throws ResourceConflictException, - OrmException, IOException, ResourceNotFoundException { + OrmException, IOException, RestApiException, UpdateException { RevisionResource rsrc = new RevisionResource(changes.parse(patchSet.getId().getParentKey()), patchSet);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/wip/WorkInProgress.java b/src/main/java/com/googlesource/gerrit/plugins/wip/WorkInProgress.java index 41eda46..9cef879 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/wip/WorkInProgress.java +++ b/src/main/java/com/googlesource/gerrit/plugins/wip/WorkInProgress.java
@@ -18,6 +18,7 @@ import com.google.gerrit.extensions.restapi.ResourceConflictException; 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.extensions.webui.UiAction; import com.google.gerrit.reviewdb.client.Change; @@ -26,6 +27,8 @@ import com.google.gerrit.reviewdb.server.ReviewDb; import com.google.gerrit.server.CurrentUser; import com.google.gerrit.server.change.RevisionResource; +import com.google.gerrit.server.git.BatchUpdate; +import com.google.gerrit.server.git.UpdateException; import com.google.gerrit.server.index.ChangeIndexer; import com.google.gwtorm.server.OrmException; import com.google.inject.Inject; @@ -38,13 +41,14 @@ @Inject WorkInProgress(Provider<ReviewDb> dbProvider, Provider<CurrentUser> userProvider, - ChangeIndexer indexer) { - super(dbProvider, userProvider, indexer); + ChangeIndexer indexer, + BatchUpdate.Factory batchUpdateFactory) { + super(dbProvider, userProvider, indexer, batchUpdateFactory); } @Override public Object apply(RevisionResource rsrc, Input input) - throws ResourceConflictException, OrmException, IOException { + throws RestApiException, OrmException, IOException, UpdateException { Change change = rsrc.getChange(); if (change.getStatus() != Status.NEW) { throw new ResourceConflictException("change is " + status(change));