Align delete refs to the rest of Gerrit
Gerrit represents the removal of refs as the transition from a non-zero
SHA to a zero-SHA, see one example in DeleteRef.deleteSingleRef()
method.
The ChangeEditUtil.deleteRef() and
StarredChangesUtilNoteDbImpl.deleteRef() failed to set the new object id
in the RefUpdate, causing a situation where other parts of the code are
expecting a non-null SHA1 and therefore causing potential NPEs.
Align the removal of refs to the rest of Gerrit and allow more
resilience in other parts of the code and in plugins, such as the
global-refdb.
Bug: Issue 430336832
Forward-Compatible: checked
Release-Notes: Fix removal of edits that failed when used with global-refdb
Change-Id: I0602aa007ed5d5d3341eca6160ce631e7bae1c04
(cherry picked from commit 9469ddfdfaf00c707a9e4854a91b3c39a7df5d65)
diff --git a/java/com/google/gerrit/server/StarredChangesUtil.java b/java/com/google/gerrit/server/StarredChangesUtil.java
index 904490c..fd53586 100644
--- a/java/com/google/gerrit/server/StarredChangesUtil.java
+++ b/java/com/google/gerrit/server/StarredChangesUtil.java
@@ -514,6 +514,7 @@
RefUpdate u = repo.updateRef(refName);
u.setForceUpdate(true);
u.setExpectedOldObjectId(oldObjectId);
+ u.setNewObjectId(ObjectId.zeroId());
u.setRefLogIdent(serverIdent.get());
u.setRefLogMessage("Unstar change", true);
RefUpdate.Result result = u.delete();
diff --git a/java/com/google/gerrit/server/edit/ChangeEditUtil.java b/java/com/google/gerrit/server/edit/ChangeEditUtil.java
index 710916e..56f9643 100644
--- a/java/com/google/gerrit/server/edit/ChangeEditUtil.java
+++ b/java/com/google/gerrit/server/edit/ChangeEditUtil.java
@@ -245,6 +245,7 @@
String refName = edit.getRefName();
RefUpdate ru = repo.updateRef(refName, true);
ru.setExpectedOldObjectId(edit.getEditCommit());
+ ru.setNewObjectId(ObjectId.zeroId());
ru.setForceUpdate(true);
RefUpdate.Result result = ru.delete();
switch (result) {