Merge "Fix deletion of draft comment refs" into stable-2.16
diff --git a/java/com/google/gerrit/server/notedb/ChangeDraftUpdate.java b/java/com/google/gerrit/server/notedb/ChangeDraftUpdate.java
index 169fd2e..bb64766 100644
--- a/java/com/google/gerrit/server/notedb/ChangeDraftUpdate.java
+++ b/java/com/google/gerrit/server/notedb/ChangeDraftUpdate.java
@@ -198,10 +198,9 @@
return NO_OP_UPDATE;
}
- // If we touched every revision and there are no comments left, tell the
+ // If there are no comments left, tell the
// caller to delete the entire ref.
- boolean touchedAllRevs = updatedRevs.equals(rnm.revisionNotes.keySet());
- if (touchedAllRevs && !hasComments) {
+ if (!rnm.noteMap.iterator().hasNext()) {
return null;
}
diff --git a/javatests/com/google/gerrit/acceptance/server/change/CommentsIT.java b/javatests/com/google/gerrit/acceptance/server/change/CommentsIT.java
index 7455419..0a9f41c 100644
--- a/javatests/com/google/gerrit/acceptance/server/change/CommentsIT.java
+++ b/javatests/com/google/gerrit/acceptance/server/change/CommentsIT.java
@@ -47,6 +47,7 @@
import com.google.gerrit.extensions.restapi.TopLevelResource;
import com.google.gerrit.reviewdb.client.Change;
import com.google.gerrit.reviewdb.client.Patch;
+import com.google.gerrit.reviewdb.client.RefNames;
import com.google.gerrit.server.change.ChangeResource;
import com.google.gerrit.server.change.RevisionResource;
import com.google.gerrit.server.notedb.ChangeNoteUtil;
@@ -69,6 +70,7 @@
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.eclipse.jgit.lib.ObjectReader;
+import org.eclipse.jgit.lib.Ref;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.notes.NoteMap;
import org.eclipse.jgit.revwalk.RevCommit;
@@ -288,6 +290,47 @@
}
@Test
+ public void postCommentsUnreachableData() throws Exception {
+ setApiUser(admin);
+
+ String file = "file";
+ PushOneCommit push =
+ pushFactory.create(db, admin.getIdent(), testRepo, "first subject", file, "l1\nl2\n");
+
+ String dest = "refs/for/master";
+ PushOneCommit.Result r1 = push.to(dest);
+ r1.assertOkStatus();
+ String changeId = r1.getChangeId();
+ String revId = r1.getCommit().getName();
+
+ PushOneCommit.Result r2 = amendChange(r1.getChangeId());
+ r2.assertOkStatus();
+
+ String draftRefName = RefNames.refsDraftComments(r1.getChange().getId(), admin.getId());
+
+ DraftInput draft = newDraft(file, Side.REVISION, 1, "comment");
+ addDraft(changeId, "1", draft);
+ ReviewInput reviewInput = new ReviewInput();
+ reviewInput.drafts = DraftHandling.PUBLISH;
+ reviewInput.message = "foo";
+ gApi.changes().id(r1.getChangeId()).revision(1).review(reviewInput);
+
+ addDraft(changeId, "2", newDraft(file, Side.REVISION, 2, "comment2"));
+ reviewInput = new ReviewInput();
+ reviewInput.drafts = DraftHandling.PUBLISH_ALL_REVISIONS;
+ reviewInput.message = "bar";
+ gApi.changes().id(r1.getChangeId()).revision(2).review(reviewInput);
+
+ Map<String, List<CommentInfo>> drafts = getDraftComments(changeId, revId);
+ assertThat(drafts.isEmpty()).isTrue();
+
+ try (Repository repo = repoManager.openRepository(allUsers)) {
+ Ref ref = repo.exactRef(draftRefName);
+ assertThat(ref).isNull();
+ }
+ }
+
+ @Test
public void listComments() throws Exception {
String file = "file";
PushOneCommit push =