Merge branch 'stable-3.12' * stable-3.12: Fix rollback implementation Change-Id: I60efdbe7726025136decdef792f7543aace16829
diff --git a/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbRefUpdate.java b/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbRefUpdate.java index e9809e1..7c95d48 100644 --- a/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbRefUpdate.java +++ b/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbRefUpdate.java
@@ -39,6 +39,7 @@ private final String projectName; private final RefUpdateValidator.Factory refValidatorFactory; private final RefUpdateValidator refUpdateValidator; + private final RefDatabase refDatabase; /** {@code SharedRefDbRefUpdate} Factory for Guice assisted injection. */ public interface Factory { @@ -71,6 +72,7 @@ refUpdateBase = refUpdate; this.projectName = projectName; this.refValidatorFactory = refValidatorFactory; + this.refDatabase = refDb; refUpdateValidator = this.refValidatorFactory.create(this.projectName, refDb, ignoredRefs); } @@ -309,6 +311,9 @@ private Result rollback(ObjectId objectId, NoParameterFunction<Result> updateFunction) throws IOException { + if (objectId == null || ObjectId.zeroId().equals(objectId)) { + return refDatabase.newUpdate(getRef().getName(), true).delete(); + } refUpdateBase.setExpectedOldObjectId(refUpdateBase.getNewObjectId()); refUpdateBase.setNewObjectId(objectId); return updateFunction.invoke();