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));