BatchMetaDataUpdate: Factor out updateRef() method The only difference between the create and update cases was to throw an exception on UPDATE_FASTFORWARD in the create case; but this can never happen. Change-Id: Iac4c5e6dc803f56f83cb2954586eb96c3b566904
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/VersionedMetaData.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/VersionedMetaData.java index bca5a6a..4c5ebc6 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/git/VersionedMetaData.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/VersionedMetaData.java
@@ -250,22 +250,7 @@ if (Objects.equal(src, revision)) { return revision; } - - RefUpdate ru = db.updateRef(refName); - ru.setExpectedOldObjectId(ObjectId.zeroId()); - ru.setNewObjectId(src); - ru.disableRefLog(); - inserter.flush(); - RefUpdate.Result result = ru.update(); - switch (result) { - case NEW: - revision = rw.parseCommit(ru.getNewObjectId()); - update.fireGitRefUpdatedEvent(ru); - return revision; - default: - throw new IOException("Cannot update " + ru.getName() + " in " - + db.getDirectory() + ": " + ru.getResult()); - } + return updateRef(ObjectId.zeroId(), src, refName); } @Override @@ -296,28 +281,8 @@ if (Objects.equal(src, expected)) { return revision; } - - RefUpdate ru = db.updateRef(getRefName()); - if (expected != null) { - ru.setExpectedOldObjectId(expected); - } else { - ru.setExpectedOldObjectId(ObjectId.zeroId()); - } - ru.setNewObjectId(src); - ru.disableRefLog(); - inserter.flush(); - - switch (ru.update(rw)) { - case NEW: - case FAST_FORWARD: - revision = rw.parseCommit(ru.getNewObjectId()); - update.fireGitRefUpdatedEvent(ru); - return revision; - - default: - throw new IOException("Cannot update " + ru.getName() + " in " - + db.getDirectory() + ": " + ru.getResult()); - } + return updateRef(Objects.firstNonNull(expected, ObjectId.zeroId()), src, + getRefName()); } @Override @@ -334,6 +299,26 @@ reader = null; } } + + private RevCommit updateRef(AnyObjectId oldId, AnyObjectId newId, + String refName) throws IOException { + RefUpdate ru = db.updateRef(refName); + ru.setExpectedOldObjectId(oldId); + ru.setNewObjectId(src); + ru.disableRefLog(); + inserter.flush(); + RefUpdate.Result result = ru.update(); + switch (result) { + case NEW: + case FAST_FORWARD: + revision = rw.parseCommit(ru.getNewObjectId()); + update.fireGitRefUpdatedEvent(ru); + return revision; + default: + throw new IOException("Cannot update " + ru.getName() + " in " + + db.getDirectory() + ": " + ru.getResult()); + } + } }; }