Search topic with ChangeIndex

Change-Id: I51c65482ab31956fbadb2a7520ef571e7ad9c6c4
This commit is contained in:
Shawn Pearce
2013-06-24 14:55:38 -06:00
parent a5ca2095e4
commit fe1f5916b1
4 changed files with 25 additions and 6 deletions

View File

@@ -353,7 +353,10 @@ public class LuceneChangeIndex implements ChangeIndex, LifecycleListener {
if (f.isRepeatable()) { if (f.isRepeatable()) {
add(result, f, (Iterable<?>) f.get(cd, fillArgs)); add(result, f, (Iterable<?>) f.get(cd, fillArgs));
} else { } else {
add(result, f, Collections.singleton(f.get(cd, fillArgs))); Object val = f.get(cd, fillArgs);
if (val != null) {
add(result, f, Collections.singleton(val));
}
} }
} }
return result; return result;

View File

@@ -27,6 +27,7 @@ import com.google.gerrit.reviewdb.server.ReviewDb;
import com.google.gerrit.server.ChangeUtil; import com.google.gerrit.server.ChangeUtil;
import com.google.gerrit.server.IdentifiedUser; import com.google.gerrit.server.IdentifiedUser;
import com.google.gerrit.server.change.PutTopic.Input; import com.google.gerrit.server.change.PutTopic.Input;
import com.google.gerrit.server.index.ChangeIndexer;
import com.google.gerrit.server.project.ChangeControl; import com.google.gerrit.server.project.ChangeControl;
import com.google.gwtorm.server.AtomicUpdate; import com.google.gwtorm.server.AtomicUpdate;
import com.google.inject.Inject; import com.google.inject.Inject;
@@ -36,6 +37,7 @@ import java.util.Collections;
class PutTopic implements RestModifyView<ChangeResource, Input> { class PutTopic implements RestModifyView<ChangeResource, Input> {
private final Provider<ReviewDb> dbProvider; private final Provider<ReviewDb> dbProvider;
private final ChangeIndexer indexer;
static class Input { static class Input {
@DefaultInput @DefaultInput
@@ -44,8 +46,9 @@ class PutTopic implements RestModifyView<ChangeResource, Input> {
} }
@Inject @Inject
PutTopic(Provider<ReviewDb> dbProvider) { PutTopic(Provider<ReviewDb> dbProvider, ChangeIndexer indexer) {
this.dbProvider = dbProvider; this.dbProvider = dbProvider;
this.indexer = indexer;
} }
@Override @Override
@@ -88,7 +91,7 @@ class PutTopic implements RestModifyView<ChangeResource, Input> {
} }
cmsg.setMessage(msgBuf.toString()); cmsg.setMessage(msgBuf.toString());
db.changes().atomicUpdate(change.getId(), change = db.changes().atomicUpdate(change.getId(),
new AtomicUpdate<Change>() { new AtomicUpdate<Change>() {
@Override @Override
public Change update(Change change) { public Change update(Change change) {
@@ -97,6 +100,7 @@ class PutTopic implements RestModifyView<ChangeResource, Input> {
} }
}); });
db.changeMessages().insert(Collections.singleton(cmsg)); db.changeMessages().insert(Collections.singleton(cmsg));
indexer.index(change);
} }
return Strings.isNullOrEmpty(newTopicName) return Strings.isNullOrEmpty(newTopicName)
? Response.none() ? Response.none()

View File

@@ -84,6 +84,17 @@ public class ChangeField {
} }
}; };
/** Topic, a short annotation on the branch. */
public static final FieldDef<ChangeData, String> TOPIC =
new FieldDef.Single<ChangeData, String>(
ChangeQueryBuilder.FIELD_TOPIC, FieldType.EXACT, false) {
@Override
public String get(ChangeData input, FillArgs args)
throws OrmException {
return input.change(args.db).getTopic();
}
};
/** List of filenames modified in the current patch set. */ /** List of filenames modified in the current patch set. */
public static final FieldDef<ChangeData, Iterable<String>> FILE = public static final FieldDef<ChangeData, Iterable<String>> FILE =
new FieldDef.Repeatable<ChangeData, String>( new FieldDef.Repeatable<ChangeData, String>(

View File

@@ -16,15 +16,16 @@ package com.google.gerrit.server.query.change;
import com.google.gerrit.reviewdb.client.Change; import com.google.gerrit.reviewdb.client.Change;
import com.google.gerrit.reviewdb.server.ReviewDb; import com.google.gerrit.reviewdb.server.ReviewDb;
import com.google.gerrit.server.query.OperatorPredicate; import com.google.gerrit.server.index.ChangeField;
import com.google.gerrit.server.index.IndexPredicate;
import com.google.gwtorm.server.OrmException; import com.google.gwtorm.server.OrmException;
import com.google.inject.Provider; import com.google.inject.Provider;
class TopicPredicate extends OperatorPredicate<ChangeData> { class TopicPredicate extends IndexPredicate<ChangeData> {
private final Provider<ReviewDb> dbProvider; private final Provider<ReviewDb> dbProvider;
TopicPredicate(Provider<ReviewDb> dbProvider, String topic) { TopicPredicate(Provider<ReviewDb> dbProvider, String topic) {
super(ChangeQueryBuilder.FIELD_TOPIC, topic); super(ChangeField.TOPIC, topic);
this.dbProvider = dbProvider; this.dbProvider = dbProvider;
} }