From 6c54b4eaa964a185a17319f3c487f99fa175a8ed Mon Sep 17 00:00:00 2001 From: Edwin Kempin Date: Mon, 11 Jun 2018 16:40:56 +0200 Subject: [PATCH] Don't fail on removing star labels from change without star labels Setting no star labels on a change that doesn't have star labels should be a no-op, but it currently fails with 500 Internal Server Error because it attempts to delete a ref that doesn't exist. Change-Id: Id180e4ff4f928aa229e29ed030b7af640e4605ff Signed-off-by: Edwin Kempin (cherry picked from commit 036751e0e35e82983fffbecfb71efd9f8a4b23b0) --- .../gerrit/acceptance/api/accounts/AccountIT.java | 11 +++++++++++ .../com/google/gerrit/server/StarredChangesUtil.java | 5 +++++ 2 files changed, 16 insertions(+) diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/accounts/AccountIT.java b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/accounts/AccountIT.java index a20e62b994..081c297924 100644 --- a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/accounts/AccountIT.java +++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/accounts/AccountIT.java @@ -504,6 +504,17 @@ public class AccountIT extends AbstractDaemonTest { ImmutableSet.of(DEFAULT_LABEL, "invalid label", "blue", "another invalid label"))); } + @Test + public void deleteStarLabelsFromChangeWithoutStarLabels() throws Exception { + PushOneCommit.Result r = createChange(); + String triplet = project.get() + "~master~" + r.getChangeId(); + assertThat(gApi.accounts().self().getStars(triplet)).isEmpty(); + + gApi.accounts().self().setStars(triplet, new StarsInput()); + + assertThat(gApi.accounts().self().getStars(triplet)).isEmpty(); + } + @Test public void starWithDefaultAndIgnoreLabel() throws Exception { PushOneCommit.Result r = createChange(); diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/StarredChangesUtil.java b/gerrit-server/src/main/java/com/google/gerrit/server/StarredChangesUtil.java index e4e181ba27..a999b953a1 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/StarredChangesUtil.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/StarredChangesUtil.java @@ -477,6 +477,11 @@ public class StarredChangesUtil { private void deleteRef(Repository repo, String refName, ObjectId oldObjectId) throws IOException, OrmException { + if (ObjectId.zeroId().equals(oldObjectId)) { + // ref doesn't exist + return; + } + RefUpdate u = repo.updateRef(refName); u.setForceUpdate(true); u.setExpectedOldObjectId(oldObjectId);