Search topic with ChangeIndex
Change-Id: I51c65482ab31956fbadb2a7520ef571e7ad9c6c4
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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>(
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user