Search topic with ChangeIndex Change-Id: I51c65482ab31956fbadb2a7520ef571e7ad9c6c4
diff --git a/gerrit-lucene/src/main/java/com/google/gerrit/lucene/LuceneChangeIndex.java b/gerrit-lucene/src/main/java/com/google/gerrit/lucene/LuceneChangeIndex.java index 3cfad48c..e84948b 100644 --- a/gerrit-lucene/src/main/java/com/google/gerrit/lucene/LuceneChangeIndex.java +++ b/gerrit-lucene/src/main/java/com/google/gerrit/lucene/LuceneChangeIndex.java
@@ -353,7 +353,10 @@ if (f.isRepeatable()) { add(result, f, (Iterable<?>) f.get(cd, fillArgs)); } 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;
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/PutTopic.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/PutTopic.java index b96b480..f46aa9e 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/PutTopic.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/PutTopic.java
@@ -27,6 +27,7 @@ import com.google.gerrit.server.ChangeUtil; import com.google.gerrit.server.IdentifiedUser; 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.gwtorm.server.AtomicUpdate; import com.google.inject.Inject; @@ -36,6 +37,7 @@ class PutTopic implements RestModifyView<ChangeResource, Input> { private final Provider<ReviewDb> dbProvider; + private final ChangeIndexer indexer; static class Input { @DefaultInput @@ -44,8 +46,9 @@ } @Inject - PutTopic(Provider<ReviewDb> dbProvider) { + PutTopic(Provider<ReviewDb> dbProvider, ChangeIndexer indexer) { this.dbProvider = dbProvider; + this.indexer = indexer; } @Override @@ -88,7 +91,7 @@ } cmsg.setMessage(msgBuf.toString()); - db.changes().atomicUpdate(change.getId(), + change = db.changes().atomicUpdate(change.getId(), new AtomicUpdate<Change>() { @Override public Change update(Change change) { @@ -97,6 +100,7 @@ } }); db.changeMessages().insert(Collections.singleton(cmsg)); + indexer.index(change); } return Strings.isNullOrEmpty(newTopicName) ? Response.none()
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/index/ChangeField.java b/gerrit-server/src/main/java/com/google/gerrit/server/index/ChangeField.java index 2b548ef..328c20a 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/index/ChangeField.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/index/ChangeField.java
@@ -84,6 +84,17 @@ } }; + /** 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. */ public static final FieldDef<ChangeData, Iterable<String>> FILE = new FieldDef.Repeatable<ChangeData, String>(
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/TopicPredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/TopicPredicate.java index 8d58376..9393fe1 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/TopicPredicate.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/TopicPredicate.java
@@ -16,15 +16,16 @@ import com.google.gerrit.reviewdb.client.Change; 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.inject.Provider; -class TopicPredicate extends OperatorPredicate<ChangeData> { +class TopicPredicate extends IndexPredicate<ChangeData> { private final Provider<ReviewDb> dbProvider; TopicPredicate(Provider<ReviewDb> dbProvider, String topic) { - super(ChangeQueryBuilder.FIELD_TOPIC, topic); + super(ChangeField.TOPIC, topic); this.dbProvider = dbProvider; }