Merge "ChangeData: Filter out zombie draft refs"
This commit is contained in:
@@ -39,6 +39,7 @@ import com.google.gerrit.extensions.api.changes.DraftInput;
|
||||
import com.google.gerrit.extensions.api.changes.HashtagsInput;
|
||||
import com.google.gerrit.extensions.api.changes.NotifyHandling;
|
||||
import com.google.gerrit.extensions.api.changes.ReviewInput;
|
||||
import com.google.gerrit.extensions.api.changes.ReviewInput.DraftHandling;
|
||||
import com.google.gerrit.extensions.api.changes.ReviewInput.RobotCommentInput;
|
||||
import com.google.gerrit.extensions.api.changes.StarsInput;
|
||||
import com.google.gerrit.extensions.api.groups.GroupInput;
|
||||
@@ -66,6 +67,7 @@ import com.google.gerrit.server.account.AuthRequest;
|
||||
import com.google.gerrit.server.change.ChangeInserter;
|
||||
import com.google.gerrit.server.change.ChangeTriplet;
|
||||
import com.google.gerrit.server.change.PatchSetInserter;
|
||||
import com.google.gerrit.server.config.AllUsersName;
|
||||
import com.google.gerrit.server.edit.ChangeEditModifier;
|
||||
import com.google.gerrit.server.git.BatchUpdate;
|
||||
import com.google.gerrit.server.git.validators.CommitValidators;
|
||||
@@ -78,6 +80,7 @@ import com.google.gerrit.server.index.change.IndexedChangeQuery;
|
||||
import com.google.gerrit.server.index.change.StalenessChecker;
|
||||
import com.google.gerrit.server.notedb.ChangeNotes;
|
||||
import com.google.gerrit.server.notedb.NoteDbChangeState;
|
||||
import com.google.gerrit.server.notedb.NoteDbChangeState.PrimaryStorage;
|
||||
import com.google.gerrit.server.project.ChangeControl;
|
||||
import com.google.gerrit.server.schema.SchemaCreator;
|
||||
import com.google.gerrit.server.util.RequestContext;
|
||||
@@ -97,6 +100,7 @@ import com.google.inject.util.Providers;
|
||||
import org.eclipse.jgit.junit.TestRepository;
|
||||
import org.eclipse.jgit.lib.Config;
|
||||
import org.eclipse.jgit.lib.ObjectInserter;
|
||||
import org.eclipse.jgit.lib.Ref;
|
||||
import org.eclipse.jgit.lib.RefUpdate;
|
||||
import org.eclipse.jgit.revwalk.RevCommit;
|
||||
import org.eclipse.jgit.util.SystemReader;
|
||||
@@ -114,6 +118,7 @@ import java.util.Iterator;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
@Ignore
|
||||
@@ -126,6 +131,7 @@ public abstract class AbstractQueryChangesTest extends GerritServerTests {
|
||||
}
|
||||
|
||||
@Inject protected AccountManager accountManager;
|
||||
@Inject protected AllUsersName allUsersName;
|
||||
@Inject protected BatchUpdate.Factory updateFactory;
|
||||
@Inject protected ChangeInserter.Factory changeFactory;
|
||||
@Inject protected ChangeQueryBuilder queryBuilder;
|
||||
@@ -1306,6 +1312,59 @@ public abstract class AbstractQueryChangesTest extends GerritServerTests {
|
||||
assertQuery("draftby:" + user2);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void byDraftByExcludesZombieDrafts() throws Exception {
|
||||
assume().that(notesMigration.readChanges()).isTrue();
|
||||
|
||||
Project.NameKey project = new Project.NameKey("repo");
|
||||
TestRepository<Repo> repo = createProject(project.get());
|
||||
Change change = insert(repo, newChange(repo));
|
||||
Change.Id id = change.getId();
|
||||
|
||||
DraftInput in = new DraftInput();
|
||||
in.line = 1;
|
||||
in.message = "nit: trailing whitespace";
|
||||
in.path = Patch.COMMIT_MSG;
|
||||
gApi.changes().id(id.get()).current().createDraft(in);
|
||||
|
||||
assertQuery("draftby:" + userId, change);
|
||||
assertQuery("commentby:" + userId);
|
||||
|
||||
TestRepository<Repo> allUsers =
|
||||
new TestRepository<>(repoManager.openRepository(allUsersName));
|
||||
|
||||
Ref draftsRef = allUsers.getRepository().exactRef(
|
||||
RefNames.refsDraftComments(id, userId));
|
||||
assertThat(draftsRef).isNotNull();
|
||||
|
||||
ReviewInput rin = ReviewInput.dislike();
|
||||
rin.drafts = DraftHandling.PUBLISH_ALL_REVISIONS;
|
||||
gApi.changes().id(id.get()).current().review(rin);
|
||||
|
||||
assertQuery("draftby:" + userId);
|
||||
assertQuery("commentby:" + userId, change);
|
||||
assertThat(allUsers.getRepository().exactRef(draftsRef.getName())).isNull();
|
||||
|
||||
// Re-add drafts ref and ensure it gets filtered out during indexing.
|
||||
allUsers.update(draftsRef.getName(), draftsRef.getObjectId());
|
||||
assertThat(allUsers.getRepository().exactRef(draftsRef.getName()))
|
||||
.isNotNull();
|
||||
|
||||
if (PrimaryStorage.of(change) == PrimaryStorage.REVIEW_DB) {
|
||||
// Record draft ref in noteDbState as well.
|
||||
ReviewDb db = ReviewDbUtil.unwrapDb(this.db);
|
||||
change = db.changes().get(id);
|
||||
NoteDbChangeState.applyDelta(change,
|
||||
NoteDbChangeState.Delta.create(
|
||||
id, Optional.empty(),
|
||||
ImmutableMap.of(userId, draftsRef.getObjectId())));
|
||||
db.changes().update(Collections.singleton(change));
|
||||
}
|
||||
|
||||
indexer.index(db, project, id);
|
||||
assertQuery("draftby:" + userId);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void byStarredBy() throws Exception {
|
||||
TestRepository<Repo> repo = createProject("repo");
|
||||
|
||||
Reference in New Issue
Block a user