Move common intra-Gerrit change queries to their own class
This is intended to replace most or all of the primary database index queries in ChangeAccess. Change-Id: I14fad0a46090b9fa3ef125c400c1d0a47d36381d
This commit is contained in:
@@ -22,11 +22,8 @@ import com.google.gerrit.reviewdb.client.PatchSet;
|
||||
import com.google.gerrit.reviewdb.client.Project;
|
||||
import com.google.gerrit.reviewdb.client.RefNames;
|
||||
import com.google.gerrit.reviewdb.server.ReviewDb;
|
||||
import com.google.gerrit.server.query.Predicate;
|
||||
import com.google.gerrit.server.query.QueryParseException;
|
||||
import com.google.gerrit.server.query.change.ChangeData;
|
||||
import com.google.gerrit.server.query.change.ChangeQueryBuilder;
|
||||
import com.google.gerrit.server.query.change.QueryProcessor;
|
||||
import com.google.gerrit.server.query.change.InternalChangeQuery;
|
||||
import com.google.gerrit.server.util.MagicBranch;
|
||||
import com.google.gwtorm.server.OrmException;
|
||||
import com.google.inject.Provider;
|
||||
@@ -44,7 +41,6 @@ import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
@@ -54,14 +50,14 @@ public class ReceiveCommitsAdvertiseRefsHook implements AdvertiseRefsHook {
|
||||
.getLogger(ReceiveCommitsAdvertiseRefsHook.class);
|
||||
|
||||
private final ReviewDb db;
|
||||
private final Provider<QueryProcessor> queryProcessor;
|
||||
private final Provider<InternalChangeQuery> queryProvider;
|
||||
private final Project.NameKey projectName;
|
||||
|
||||
public ReceiveCommitsAdvertiseRefsHook(ReviewDb db,
|
||||
Provider<QueryProcessor> queryProcessor,
|
||||
Provider<InternalChangeQuery> queryProvider,
|
||||
Project.NameKey projectName) {
|
||||
this.db = db;
|
||||
this.queryProcessor = queryProcessor;
|
||||
this.queryProvider = queryProvider;
|
||||
this.projectName = projectName;
|
||||
}
|
||||
|
||||
@@ -105,7 +101,8 @@ public class ReceiveCommitsAdvertiseRefsHook implements AdvertiseRefsHook {
|
||||
final int limit = 32;
|
||||
try {
|
||||
Set<PatchSet.Id> toGet = Sets.newHashSetWithExpectedSize(limit);
|
||||
for (ChangeData cd : queryRecentChanges(limit)) {
|
||||
for (ChangeData cd :
|
||||
queryProvider.get().setLimit(limit).byProjectOpen(projectName)) {
|
||||
PatchSet.Id id = cd.change().currentPatchSetId();
|
||||
if (id != null) {
|
||||
toGet.add(id);
|
||||
@@ -174,20 +171,6 @@ public class ReceiveCommitsAdvertiseRefsHook implements AdvertiseRefsHook {
|
||||
return toInclude;
|
||||
}
|
||||
|
||||
private List<ChangeData> queryRecentChanges(int limit)
|
||||
throws OrmException {
|
||||
QueryProcessor qp = queryProcessor.get();
|
||||
qp.setLimit(limit);
|
||||
ChangeQueryBuilder qb = qp.getQueryBuilder();
|
||||
Predicate<ChangeData> p =
|
||||
Predicate.and(qb.project(projectName.get()), qb.status_open());
|
||||
try {
|
||||
return qp.queryChanges(p).changes();
|
||||
} catch (QueryParseException e) {
|
||||
throw new OrmException(e);
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean skip(String name) {
|
||||
return name.startsWith(RefNames.REFS_CHANGES)
|
||||
|| name.startsWith(RefNames.REFS_CACHE_AUTOMERGE)
|
||||
|
||||
Reference in New Issue
Block a user