Stop passing ReviewDb, etc. to ChangeData methods
Many methods that are intended for lazy initialization take a ReviewDb, and some take other helper objects such as GitRepositoryManager. This achieves the intended lazy-loading behavior but requires a lot of injection of dependencies into callers, and may become untenable as lazy loading of ChangeData requires more helpers. Instead, since after all this is Java, construct ChangeData with a Factory. This is subtle because it is used from a lot of places that need control over which ReviewDb handle to pass in, so the factory methods still need to take a db. ChangeData objects are still intended (i.e. safe) for use only by one thread, so having a single ReviewDb instance stored for the lifetime of the ChangeData should be fine. We just need to be careful about which we pass in, particularly in a place like ChangeIndexer. As a side effect, clean up some other injection, particularly in the predicate class hierarchy. Change-Id: I52e1eb2a76788c12dd95767e89095ab80df7e1cc
This commit is contained in:
@@ -28,6 +28,7 @@ import com.google.common.util.concurrent.ListeningExecutorService;
|
|||||||
import com.google.gerrit.common.Nullable;
|
import com.google.gerrit.common.Nullable;
|
||||||
import com.google.gerrit.reviewdb.client.Change;
|
import com.google.gerrit.reviewdb.client.Change;
|
||||||
import com.google.gerrit.reviewdb.client.PatchSetApproval;
|
import com.google.gerrit.reviewdb.client.PatchSetApproval;
|
||||||
|
import com.google.gerrit.reviewdb.server.ReviewDb;
|
||||||
import com.google.gerrit.server.config.GerritServerConfig;
|
import com.google.gerrit.server.config.GerritServerConfig;
|
||||||
import com.google.gerrit.server.config.SitePaths;
|
import com.google.gerrit.server.config.SitePaths;
|
||||||
import com.google.gerrit.server.index.ChangeField;
|
import com.google.gerrit.server.index.ChangeField;
|
||||||
@@ -49,6 +50,7 @@ import com.google.gerrit.server.query.change.ChangeDataSource;
|
|||||||
import com.google.gerrit.server.query.change.ChangeQueryBuilder;
|
import com.google.gerrit.server.query.change.ChangeQueryBuilder;
|
||||||
import com.google.gwtorm.server.OrmException;
|
import com.google.gwtorm.server.OrmException;
|
||||||
import com.google.gwtorm.server.ResultSet;
|
import com.google.gwtorm.server.ResultSet;
|
||||||
|
import com.google.inject.Provider;
|
||||||
import com.google.inject.assistedinject.Assisted;
|
import com.google.inject.assistedinject.Assisted;
|
||||||
import com.google.inject.assistedinject.AssistedInject;
|
import com.google.inject.assistedinject.AssistedInject;
|
||||||
|
|
||||||
@@ -147,6 +149,8 @@ public class LuceneChangeIndex implements ChangeIndex {
|
|||||||
private final SitePaths sitePaths;
|
private final SitePaths sitePaths;
|
||||||
private final FillArgs fillArgs;
|
private final FillArgs fillArgs;
|
||||||
private final ListeningExecutorService executor;
|
private final ListeningExecutorService executor;
|
||||||
|
private final Provider<ReviewDb> db;
|
||||||
|
private final ChangeData.Factory changeDataFactory;
|
||||||
private final File dir;
|
private final File dir;
|
||||||
private final Schema<ChangeData> schema;
|
private final Schema<ChangeData> schema;
|
||||||
private final SubIndex openIndex;
|
private final SubIndex openIndex;
|
||||||
@@ -157,12 +161,16 @@ public class LuceneChangeIndex implements ChangeIndex {
|
|||||||
@GerritServerConfig Config cfg,
|
@GerritServerConfig Config cfg,
|
||||||
SitePaths sitePaths,
|
SitePaths sitePaths,
|
||||||
@IndexExecutor ListeningExecutorService executor,
|
@IndexExecutor ListeningExecutorService executor,
|
||||||
|
Provider<ReviewDb> db,
|
||||||
|
ChangeData.Factory changeDataFactory,
|
||||||
FillArgs fillArgs,
|
FillArgs fillArgs,
|
||||||
@Assisted Schema<ChangeData> schema,
|
@Assisted Schema<ChangeData> schema,
|
||||||
@Assisted @Nullable String base) throws IOException {
|
@Assisted @Nullable String base) throws IOException {
|
||||||
this.sitePaths = sitePaths;
|
this.sitePaths = sitePaths;
|
||||||
this.fillArgs = fillArgs;
|
this.fillArgs = fillArgs;
|
||||||
this.executor = executor;
|
this.executor = executor;
|
||||||
|
this.db = db;
|
||||||
|
this.changeDataFactory = changeDataFactory;
|
||||||
this.schema = schema;
|
this.schema = schema;
|
||||||
|
|
||||||
if (base == null) {
|
if (base == null) {
|
||||||
@@ -301,10 +309,10 @@ public class LuceneChangeIndex implements ChangeIndex {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class QuerySource implements ChangeDataSource {
|
private static final ImmutableSet<String> FIELDS =
|
||||||
private static final ImmutableSet<String> FIELDS =
|
ImmutableSet.of(ID_FIELD, CHANGE_FIELD, APPROVAL_FIELD);
|
||||||
ImmutableSet.of(ID_FIELD, CHANGE_FIELD, APPROVAL_FIELD);
|
|
||||||
|
|
||||||
|
private class QuerySource implements ChangeDataSource {
|
||||||
private final List<SubIndex> indexes;
|
private final List<SubIndex> indexes;
|
||||||
private final Query query;
|
private final Query query;
|
||||||
private final int limit;
|
private final int limit;
|
||||||
@@ -391,16 +399,16 @@ public class LuceneChangeIndex implements ChangeIndex {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static ChangeData toChangeData(Document doc) {
|
private ChangeData toChangeData(Document doc) {
|
||||||
BytesRef cb = doc.getBinaryValue(CHANGE_FIELD);
|
BytesRef cb = doc.getBinaryValue(CHANGE_FIELD);
|
||||||
if (cb == null) {
|
if (cb == null) {
|
||||||
int id = doc.getField(ID_FIELD).numericValue().intValue();
|
int id = doc.getField(ID_FIELD).numericValue().intValue();
|
||||||
return new ChangeData(new Change.Id(id));
|
return changeDataFactory.create(db.get(), new Change.Id(id));
|
||||||
}
|
}
|
||||||
|
|
||||||
Change change = ChangeProtoField.CODEC.decode(
|
Change change = ChangeProtoField.CODEC.decode(
|
||||||
cb.bytes, cb.offset, cb.length);
|
cb.bytes, cb.offset, cb.length);
|
||||||
ChangeData cd = new ChangeData(change);
|
ChangeData cd = changeDataFactory.create(db.get(), change);
|
||||||
|
|
||||||
BytesRef[] approvalsBytes = doc.getBinaryValues(APPROVAL_FIELD);
|
BytesRef[] approvalsBytes = doc.getBinaryValues(APPROVAL_FIELD);
|
||||||
if (approvalsBytes != null) {
|
if (approvalsBytes != null) {
|
||||||
|
@@ -29,6 +29,7 @@ import com.google.gerrit.reviewdb.client.Project;
|
|||||||
import com.google.gerrit.reviewdb.server.ReviewDb;
|
import com.google.gerrit.reviewdb.server.ReviewDb;
|
||||||
import com.google.gerrit.server.cache.CacheRemovalListener;
|
import com.google.gerrit.server.cache.CacheRemovalListener;
|
||||||
import com.google.gerrit.server.cache.h2.DefaultCacheFactory;
|
import com.google.gerrit.server.cache.h2.DefaultCacheFactory;
|
||||||
|
import com.google.gerrit.server.config.FactoryModule;
|
||||||
import com.google.gerrit.server.config.GerritServerConfig;
|
import com.google.gerrit.server.config.GerritServerConfig;
|
||||||
import com.google.gerrit.server.index.ChangeBatchIndexer;
|
import com.google.gerrit.server.index.ChangeBatchIndexer;
|
||||||
import com.google.gerrit.server.index.ChangeIndex;
|
import com.google.gerrit.server.index.ChangeIndex;
|
||||||
@@ -36,6 +37,7 @@ import com.google.gerrit.server.index.ChangeSchemas;
|
|||||||
import com.google.gerrit.server.index.IndexCollection;
|
import com.google.gerrit.server.index.IndexCollection;
|
||||||
import com.google.gerrit.server.index.IndexModule;
|
import com.google.gerrit.server.index.IndexModule;
|
||||||
import com.google.gerrit.server.patch.PatchListCacheImpl;
|
import com.google.gerrit.server.patch.PatchListCacheImpl;
|
||||||
|
import com.google.gerrit.server.query.change.ChangeData;
|
||||||
import com.google.gerrit.server.schema.DataSourceProvider;
|
import com.google.gerrit.server.schema.DataSourceProvider;
|
||||||
import com.google.gerrit.server.schema.DataSourceType;
|
import com.google.gerrit.server.schema.DataSourceType;
|
||||||
import com.google.gerrit.solr.SolrIndexModule;
|
import com.google.gerrit.solr.SolrIndexModule;
|
||||||
@@ -143,7 +145,7 @@ public class Reindex extends SiteProgram {
|
|||||||
}
|
}
|
||||||
modules.add(changeIndexModule);
|
modules.add(changeIndexModule);
|
||||||
modules.add(new ReviewDbModule());
|
modules.add(new ReviewDbModule());
|
||||||
modules.add(new AbstractModule() {
|
modules.add(new FactoryModule() {
|
||||||
@SuppressWarnings("rawtypes")
|
@SuppressWarnings("rawtypes")
|
||||||
@Override
|
@Override
|
||||||
protected void configure() {
|
protected void configure() {
|
||||||
@@ -152,6 +154,7 @@ public class Reindex extends SiteProgram {
|
|||||||
bind(new TypeLiteral<DynamicSet<CacheRemovalListener>>() {})
|
bind(new TypeLiteral<DynamicSet<CacheRemovalListener>>() {})
|
||||||
.toInstance(DynamicSet.<CacheRemovalListener> emptySet());
|
.toInstance(DynamicSet.<CacheRemovalListener> emptySet());
|
||||||
install(new DefaultCacheFactory.Module());
|
install(new DefaultCacheFactory.Module());
|
||||||
|
factory(ChangeData.Factory.class);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return dbInjector.createChildInjector(modules);
|
return dbInjector.createChildInjector(modules);
|
||||||
|
@@ -23,6 +23,7 @@ import com.google.gerrit.reviewdb.client.PatchSet;
|
|||||||
import com.google.gerrit.reviewdb.client.Project;
|
import com.google.gerrit.reviewdb.client.Project;
|
||||||
import com.google.gerrit.reviewdb.client.Project.NameKey;
|
import com.google.gerrit.reviewdb.client.Project.NameKey;
|
||||||
import com.google.gerrit.reviewdb.server.ReviewDb;
|
import com.google.gerrit.reviewdb.server.ReviewDb;
|
||||||
|
import com.google.gerrit.server.config.FactoryModule;
|
||||||
import com.google.gerrit.server.config.GerritServerConfig;
|
import com.google.gerrit.server.config.GerritServerConfig;
|
||||||
import com.google.gerrit.server.config.SitePaths;
|
import com.google.gerrit.server.config.SitePaths;
|
||||||
import com.google.gerrit.server.config.TrackingFooter;
|
import com.google.gerrit.server.config.TrackingFooter;
|
||||||
@@ -37,9 +38,9 @@ import com.google.gerrit.server.patch.PatchList;
|
|||||||
import com.google.gerrit.server.patch.PatchListCache;
|
import com.google.gerrit.server.patch.PatchListCache;
|
||||||
import com.google.gerrit.server.patch.PatchListKey;
|
import com.google.gerrit.server.patch.PatchListKey;
|
||||||
import com.google.gerrit.server.patch.PatchListNotAvailableException;
|
import com.google.gerrit.server.patch.PatchListNotAvailableException;
|
||||||
|
import com.google.gerrit.server.query.change.ChangeData;
|
||||||
import com.google.gwtorm.server.OrmException;
|
import com.google.gwtorm.server.OrmException;
|
||||||
import com.google.gwtorm.server.SchemaFactory;
|
import com.google.gwtorm.server.SchemaFactory;
|
||||||
import com.google.inject.AbstractModule;
|
|
||||||
import com.google.inject.Guice;
|
import com.google.inject.Guice;
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
import com.google.inject.Injector;
|
import com.google.inject.Injector;
|
||||||
@@ -97,10 +98,11 @@ class InitIndex implements InitStep {
|
|||||||
index.close();
|
index.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
private class MockIndexSupportModule extends AbstractModule {
|
private class MockIndexSupportModule extends FactoryModule {
|
||||||
@Override
|
@Override
|
||||||
protected void configure() {
|
protected void configure() {
|
||||||
bind(SitePaths.class).toInstance(site);
|
bind(SitePaths.class).toInstance(site);
|
||||||
|
factory(ChangeData.Factory.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Provides @GerritServerConfig Config getConfig() {
|
@Provides @GerritServerConfig Config getConfig() {
|
||||||
|
@@ -454,7 +454,7 @@ public class ChangeUtil {
|
|||||||
db.changeMessages().delete(db.changeMessages().byChange(changeId));
|
db.changeMessages().delete(db.changeMessages().byChange(changeId));
|
||||||
db.starredChanges().delete(db.starredChanges().byChange(changeId));
|
db.starredChanges().delete(db.starredChanges().byChange(changeId));
|
||||||
db.changes().delete(Collections.singleton(change));
|
db.changes().delete(Collections.singleton(change));
|
||||||
indexer.delete(change);
|
indexer.delete(db, change);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void deleteOnlyDraftPatchSet(PatchSet patch, Change change)
|
public void deleteOnlyDraftPatchSet(PatchSet patch, Change change)
|
||||||
|
@@ -77,7 +77,6 @@ import com.google.gerrit.server.account.AccountInfo;
|
|||||||
import com.google.gerrit.server.actions.ActionInfo;
|
import com.google.gerrit.server.actions.ActionInfo;
|
||||||
import com.google.gerrit.server.extensions.webui.UiActions;
|
import com.google.gerrit.server.extensions.webui.UiActions;
|
||||||
import com.google.gerrit.server.git.LabelNormalizer;
|
import com.google.gerrit.server.git.LabelNormalizer;
|
||||||
import com.google.gerrit.server.patch.PatchListCache;
|
|
||||||
import com.google.gerrit.server.patch.PatchListNotAvailableException;
|
import com.google.gerrit.server.patch.PatchListNotAvailableException;
|
||||||
import com.google.gerrit.server.patch.PatchSetInfoFactory;
|
import com.google.gerrit.server.patch.PatchSetInfoFactory;
|
||||||
import com.google.gerrit.server.patch.PatchSetInfoNotAvailableException;
|
import com.google.gerrit.server.patch.PatchSetInfoNotAvailableException;
|
||||||
@@ -132,6 +131,7 @@ public class ChangeJson {
|
|||||||
private final AnonymousUser anonymous;
|
private final AnonymousUser anonymous;
|
||||||
private final IdentifiedUser.GenericFactory userFactory;
|
private final IdentifiedUser.GenericFactory userFactory;
|
||||||
private final ProjectControl.GenericFactory projectControlFactory;
|
private final ProjectControl.GenericFactory projectControlFactory;
|
||||||
|
private final ChangeData.Factory changeDataFactory;
|
||||||
private final PatchSetInfoFactory patchSetInfoFactory;
|
private final PatchSetInfoFactory patchSetInfoFactory;
|
||||||
private final ChangesCollection changes;
|
private final ChangesCollection changes;
|
||||||
private final FileInfoJson fileInfoJson;
|
private final FileInfoJson fileInfoJson;
|
||||||
@@ -140,7 +140,6 @@ public class ChangeJson {
|
|||||||
private final DynamicMap<DownloadCommand> downloadCommands;
|
private final DynamicMap<DownloadCommand> downloadCommands;
|
||||||
private final DynamicMap<RestView<ChangeResource>> changeViews;
|
private final DynamicMap<RestView<ChangeResource>> changeViews;
|
||||||
private final Revisions revisions;
|
private final Revisions revisions;
|
||||||
private final PatchListCache patchListCache;
|
|
||||||
|
|
||||||
private EnumSet<ListChangesOption> options;
|
private EnumSet<ListChangesOption> options;
|
||||||
private AccountInfo.Loader accountLoader;
|
private AccountInfo.Loader accountLoader;
|
||||||
@@ -156,6 +155,7 @@ public class ChangeJson {
|
|||||||
AnonymousUser au,
|
AnonymousUser au,
|
||||||
IdentifiedUser.GenericFactory uf,
|
IdentifiedUser.GenericFactory uf,
|
||||||
ProjectControl.GenericFactory pcf,
|
ProjectControl.GenericFactory pcf,
|
||||||
|
ChangeData.Factory cdf,
|
||||||
PatchSetInfoFactory psi,
|
PatchSetInfoFactory psi,
|
||||||
ChangesCollection changes,
|
ChangesCollection changes,
|
||||||
FileInfoJson fileInfoJson,
|
FileInfoJson fileInfoJson,
|
||||||
@@ -163,14 +163,14 @@ public class ChangeJson {
|
|||||||
DynamicMap<DownloadScheme> downloadSchemes,
|
DynamicMap<DownloadScheme> downloadSchemes,
|
||||||
DynamicMap<DownloadCommand> downloadCommands,
|
DynamicMap<DownloadCommand> downloadCommands,
|
||||||
DynamicMap<RestView<ChangeResource>> changeViews,
|
DynamicMap<RestView<ChangeResource>> changeViews,
|
||||||
Revisions revisions,
|
Revisions revisions) {
|
||||||
PatchListCache patchListCache) {
|
|
||||||
this.db = db;
|
this.db = db;
|
||||||
this.labelNormalizer = ln;
|
this.labelNormalizer = ln;
|
||||||
this.userProvider = user;
|
this.userProvider = user;
|
||||||
this.anonymous = au;
|
this.anonymous = au;
|
||||||
this.userFactory = uf;
|
this.userFactory = uf;
|
||||||
this.projectControlFactory = pcf;
|
this.projectControlFactory = pcf;
|
||||||
|
this.changeDataFactory = cdf;
|
||||||
this.patchSetInfoFactory = psi;
|
this.patchSetInfoFactory = psi;
|
||||||
this.changes = changes;
|
this.changes = changes;
|
||||||
this.fileInfoJson = fileInfoJson;
|
this.fileInfoJson = fileInfoJson;
|
||||||
@@ -179,7 +179,6 @@ public class ChangeJson {
|
|||||||
this.downloadCommands = downloadCommands;
|
this.downloadCommands = downloadCommands;
|
||||||
this.changeViews = changeViews;
|
this.changeViews = changeViews;
|
||||||
this.revisions = revisions;
|
this.revisions = revisions;
|
||||||
this.patchListCache = patchListCache;
|
|
||||||
|
|
||||||
options = EnumSet.noneOf(ListChangesOption.class);
|
options = EnumSet.noneOf(ListChangesOption.class);
|
||||||
projectControls = CacheBuilder.newBuilder()
|
projectControls = CacheBuilder.newBuilder()
|
||||||
@@ -204,15 +203,15 @@ public class ChangeJson {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public ChangeInfo format(ChangeResource rsrc) throws OrmException {
|
public ChangeInfo format(ChangeResource rsrc) throws OrmException {
|
||||||
return format(new ChangeData(rsrc.getControl()));
|
return format(changeDataFactory.create(db.get(), rsrc.getControl()));
|
||||||
}
|
}
|
||||||
|
|
||||||
public ChangeInfo format(Change change) throws OrmException {
|
public ChangeInfo format(Change change) throws OrmException {
|
||||||
return format(new ChangeData(change));
|
return format(changeDataFactory.create(db.get(), change));
|
||||||
}
|
}
|
||||||
|
|
||||||
public ChangeInfo format(Change.Id id) throws OrmException {
|
public ChangeInfo format(Change.Id id) throws OrmException {
|
||||||
return format(new ChangeData(id));
|
return format(changeDataFactory.create(db.get(), id));
|
||||||
}
|
}
|
||||||
|
|
||||||
public ChangeInfo format(ChangeData cd) throws OrmException {
|
public ChangeInfo format(ChangeData cd) throws OrmException {
|
||||||
@@ -221,7 +220,7 @@ public class ChangeJson {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public ChangeInfo format(RevisionResource rsrc) throws OrmException {
|
public ChangeInfo format(RevisionResource rsrc) throws OrmException {
|
||||||
ChangeData cd = new ChangeData(rsrc.getControl());
|
ChangeData cd = changeDataFactory.create(db.get(), rsrc.getControl());
|
||||||
cd.limitToPatchSets(ImmutableList.of(rsrc.getPatchSet().getId()));
|
cd.limitToPatchSets(ImmutableList.of(rsrc.getPatchSet().getId()));
|
||||||
return format(cd);
|
return format(cd);
|
||||||
}
|
}
|
||||||
@@ -270,13 +269,13 @@ public class ChangeJson {
|
|||||||
|
|
||||||
private ChangeInfo toChangeInfo(ChangeData cd) throws OrmException {
|
private ChangeInfo toChangeInfo(ChangeData cd) throws OrmException {
|
||||||
ChangeInfo out = new ChangeInfo();
|
ChangeInfo out = new ChangeInfo();
|
||||||
Change in = cd.change(db);
|
Change in = cd.change();
|
||||||
out.project = in.getProject().get();
|
out.project = in.getProject().get();
|
||||||
out.branch = in.getDest().getShortName();
|
out.branch = in.getDest().getShortName();
|
||||||
out.topic = in.getTopic();
|
out.topic = in.getTopic();
|
||||||
out.changeId = in.getKey().get();
|
out.changeId = in.getKey().get();
|
||||||
out.mergeable = in.getStatus() != Change.Status.MERGED ? in.isMergeable() : null;
|
out.mergeable = in.getStatus() != Change.Status.MERGED ? in.isMergeable() : null;
|
||||||
ChangedLines changedLines = cd.changedLines(db, patchListCache);
|
ChangedLines changedLines = cd.changedLines();
|
||||||
if (changedLines != null) {
|
if (changedLines != null) {
|
||||||
out.insertions = changedLines.insertions;
|
out.insertions = changedLines.insertions;
|
||||||
out.deletions = changedLines.deletions;
|
out.deletions = changedLines.deletions;
|
||||||
@@ -345,7 +344,7 @@ public class ChangeJson {
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Change change = cd.change(db);
|
Change change = cd.change();
|
||||||
if (change == null) {
|
if (change == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -365,7 +364,7 @@ public class ChangeJson {
|
|||||||
if (ctl == null) {
|
if (ctl == null) {
|
||||||
return ImmutableList.of();
|
return ImmutableList.of();
|
||||||
}
|
}
|
||||||
PatchSet ps = cd.currentPatchSet(db);
|
PatchSet ps = cd.currentPatchSet();
|
||||||
if (ps == null) {
|
if (ps == null) {
|
||||||
return ImmutableList.of();
|
return ImmutableList.of();
|
||||||
}
|
}
|
||||||
@@ -405,7 +404,7 @@ public class ChangeJson {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (standard) {
|
if (standard) {
|
||||||
for (PatchSetApproval psa : cd.currentApprovals(db)) {
|
for (PatchSetApproval psa : cd.currentApprovals()) {
|
||||||
if (type.matches(psa)) {
|
if (type.matches(psa)) {
|
||||||
short val = psa.getValue();
|
short val = psa.getValue();
|
||||||
Account.Id accountId = psa.getAccountId();
|
Account.Id accountId = psa.getAccountId();
|
||||||
@@ -492,7 +491,7 @@ public class ChangeJson {
|
|||||||
// All users ever added, even if they can't vote on one or all labels.
|
// All users ever added, even if they can't vote on one or all labels.
|
||||||
Set<Account.Id> allUsers = Sets.newHashSet();
|
Set<Account.Id> allUsers = Sets.newHashSet();
|
||||||
ListMultimap<PatchSet.Id, PatchSetApproval> allApprovals =
|
ListMultimap<PatchSet.Id, PatchSetApproval> allApprovals =
|
||||||
cd.allApprovalsMap(db);
|
cd.allApprovalsMap();
|
||||||
for (PatchSetApproval psa : allApprovals.values()) {
|
for (PatchSetApproval psa : allApprovals.values()) {
|
||||||
allUsers.add(psa.getAccountId());
|
allUsers.add(psa.getAccountId());
|
||||||
}
|
}
|
||||||
@@ -538,13 +537,13 @@ public class ChangeJson {
|
|||||||
LabelTypes labelTypes, boolean standard, boolean detailed)
|
LabelTypes labelTypes, boolean standard, boolean detailed)
|
||||||
throws OrmException {
|
throws OrmException {
|
||||||
Set<Account.Id> allUsers = Sets.newHashSet();
|
Set<Account.Id> allUsers = Sets.newHashSet();
|
||||||
for (PatchSetApproval psa : cd.allApprovals(db)) {
|
for (PatchSetApproval psa : cd.allApprovals()) {
|
||||||
allUsers.add(psa.getAccountId());
|
allUsers.add(psa.getAccountId());
|
||||||
}
|
}
|
||||||
|
|
||||||
Set<String> labelNames = Sets.newHashSet();
|
Set<String> labelNames = Sets.newHashSet();
|
||||||
Multimap<Account.Id, PatchSetApproval> current = HashMultimap.create();
|
Multimap<Account.Id, PatchSetApproval> current = HashMultimap.create();
|
||||||
for (PatchSetApproval a : cd.currentApprovals(db)) {
|
for (PatchSetApproval a : cd.currentApprovals()) {
|
||||||
LabelType type = labelTypes.byLabel(a.getLabelId());
|
LabelType type = labelTypes.byLabel(a.getLabelId());
|
||||||
if (type != null && a.getValue() != 0) {
|
if (type != null && a.getValue() != 0) {
|
||||||
labelNames.add(type.getName());
|
labelNames.add(type.getName());
|
||||||
@@ -735,8 +734,8 @@ public class ChangeJson {
|
|||||||
List<ResultSet<ChangeMessage>> m =
|
List<ResultSet<ChangeMessage>> m =
|
||||||
Lists.newArrayListWithCapacity(batch.size());
|
Lists.newArrayListWithCapacity(batch.size());
|
||||||
for (ChangeData cd : batch) {
|
for (ChangeData cd : batch) {
|
||||||
PatchSet.Id ps = cd.change(db).currentPatchSetId();
|
PatchSet.Id ps = cd.change().currentPatchSetId();
|
||||||
if (ps != null && cd.change(db).getStatus().isOpen()) {
|
if (ps != null && cd.change().getStatus().isOpen()) {
|
||||||
m.add(db.get().changeMessages().byPatchSet(ps));
|
m.add(db.get().changeMessages().byPatchSet(ps));
|
||||||
} else {
|
} else {
|
||||||
m.add(NO_MESSAGES);
|
m.add(NO_MESSAGES);
|
||||||
@@ -761,7 +760,7 @@ public class ChangeJson {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
Account.Id changeOwnerId = cd.change(db).getOwner();
|
Account.Id changeOwnerId = cd.change().getOwner();
|
||||||
for (ChangeMessage cm : msgs) {
|
for (ChangeMessage cm : msgs) {
|
||||||
if (self.equals(cm.getAuthor())) {
|
if (self.equals(cm.getAuthor())) {
|
||||||
return true;
|
return true;
|
||||||
@@ -780,9 +779,9 @@ public class ChangeJson {
|
|||||||
|
|
||||||
Collection<PatchSet> src;
|
Collection<PatchSet> src;
|
||||||
if (cd.getLimitedPatchSets() != null || has(ALL_REVISIONS)) {
|
if (cd.getLimitedPatchSets() != null || has(ALL_REVISIONS)) {
|
||||||
src = cd.patches(db);
|
src = cd.patches();
|
||||||
} else {
|
} else {
|
||||||
src = Collections.singletonList(cd.currentPatchSet(db));
|
src = Collections.singletonList(cd.currentPatchSet());
|
||||||
}
|
}
|
||||||
Map<String, RevisionInfo> res = Maps.newLinkedHashMap();
|
Map<String, RevisionInfo> res = Maps.newLinkedHashMap();
|
||||||
for (PatchSet in : src) {
|
for (PatchSet in : src) {
|
||||||
@@ -796,7 +795,7 @@ public class ChangeJson {
|
|||||||
private RevisionInfo toRevisionInfo(ChangeData cd, PatchSet in)
|
private RevisionInfo toRevisionInfo(ChangeData cd, PatchSet in)
|
||||||
throws OrmException {
|
throws OrmException {
|
||||||
RevisionInfo out = new RevisionInfo();
|
RevisionInfo out = new RevisionInfo();
|
||||||
out.isCurrent = in.getId().equals(cd.change(db).currentPatchSetId());
|
out.isCurrent = in.getId().equals(cd.change().currentPatchSetId());
|
||||||
out._number = in.getId().get();
|
out._number = in.getId().get();
|
||||||
out.draft = in.isDraft() ? true : null;
|
out.draft = in.isDraft() ? true : null;
|
||||||
out.fetch = makeFetchMap(cd, in);
|
out.fetch = makeFetchMap(cd, in);
|
||||||
@@ -811,7 +810,7 @@ public class ChangeJson {
|
|||||||
|
|
||||||
if (has(ALL_FILES) || (out.isCurrent && has(CURRENT_FILES))) {
|
if (has(ALL_FILES) || (out.isCurrent && has(CURRENT_FILES))) {
|
||||||
try {
|
try {
|
||||||
out.files = fileInfoJson.toFileInfoMap(cd.change(db), in);
|
out.files = fileInfoJson.toFileInfoMap(cd.change(), in);
|
||||||
out.files.remove(Patch.COMMIT_MSG);
|
out.files.remove(Patch.COMMIT_MSG);
|
||||||
} catch (PatchListNotAvailableException e) {
|
} catch (PatchListNotAvailableException e) {
|
||||||
log.warn("Cannot load PatchList " + in.getId(), e);
|
log.warn("Cannot load PatchList " + in.getId(), e);
|
||||||
|
@@ -103,7 +103,7 @@ public class DeleteReviewer implements RestModifyView<ReviewerResource, Input> {
|
|||||||
} finally {
|
} finally {
|
||||||
db.rollback();
|
db.rollback();
|
||||||
}
|
}
|
||||||
indexer.index(rsrc.getChange());
|
indexer.index(db, rsrc.getChange());
|
||||||
return Response.none();
|
return Response.none();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -18,9 +18,11 @@ import com.google.gerrit.common.data.GlobalCapability;
|
|||||||
import com.google.gerrit.extensions.annotations.RequiresCapability;
|
import com.google.gerrit.extensions.annotations.RequiresCapability;
|
||||||
import com.google.gerrit.extensions.restapi.Response;
|
import com.google.gerrit.extensions.restapi.Response;
|
||||||
import com.google.gerrit.extensions.restapi.RestModifyView;
|
import com.google.gerrit.extensions.restapi.RestModifyView;
|
||||||
|
import com.google.gerrit.reviewdb.server.ReviewDb;
|
||||||
import com.google.gerrit.server.change.Index.Input;
|
import com.google.gerrit.server.change.Index.Input;
|
||||||
import com.google.gerrit.server.index.ChangeIndexer;
|
import com.google.gerrit.server.index.ChangeIndexer;
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
|
import com.google.inject.Provider;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
@@ -29,16 +31,19 @@ public class Index implements RestModifyView<ChangeResource, Input> {
|
|||||||
public static class Input {
|
public static class Input {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private final Provider<ReviewDb> db;
|
||||||
private final ChangeIndexer indexer;
|
private final ChangeIndexer indexer;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
Index(ChangeIndexer indexer) {
|
Index(Provider<ReviewDb> db,
|
||||||
|
ChangeIndexer indexer) {
|
||||||
|
this.db = db;
|
||||||
this.indexer = indexer;
|
this.indexer = indexer;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Response<?> apply(ChangeResource rsrc, Input input) throws IOException {
|
public Response<?> apply(ChangeResource rsrc, Input input) throws IOException {
|
||||||
indexer.index(rsrc.getChange());
|
indexer.index(db.get(), rsrc.getChange());
|
||||||
return Response.none();
|
return Response.none();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -182,7 +182,7 @@ public class Mergeable implements RestReadView<RevisionResource> {
|
|||||||
c.setMergeable(mergeable);
|
c.setMergeable(mergeable);
|
||||||
c.setLastSha1MergeTested(toRevId(ref));
|
c.setLastSha1MergeTested(toRevId(ref));
|
||||||
db.get().changes().update(Collections.singleton(c));
|
db.get().changes().update(Collections.singleton(c));
|
||||||
indexer.index(c);
|
indexer.index(db.get(), c);
|
||||||
}
|
}
|
||||||
return mergeable;
|
return mergeable;
|
||||||
} catch (MergeException | IOException | NoSuchProjectException e) {
|
} catch (MergeException | IOException | NoSuchProjectException e) {
|
||||||
|
@@ -43,14 +43,17 @@ import java.util.TreeMap;
|
|||||||
|
|
||||||
public class ReviewerJson {
|
public class ReviewerJson {
|
||||||
private final Provider<ReviewDb> db;
|
private final Provider<ReviewDb> db;
|
||||||
|
private final ChangeData.Factory changeDataFactory;
|
||||||
private final LabelNormalizer labelNormalizer;
|
private final LabelNormalizer labelNormalizer;
|
||||||
private final AccountInfo.Loader.Factory accountLoaderFactory;
|
private final AccountInfo.Loader.Factory accountLoaderFactory;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
ReviewerJson(Provider<ReviewDb> db,
|
ReviewerJson(Provider<ReviewDb> db,
|
||||||
|
ChangeData.Factory changeDataFactory,
|
||||||
LabelNormalizer labelNormalizer,
|
LabelNormalizer labelNormalizer,
|
||||||
AccountInfo.Loader.Factory accountLoaderFactory) {
|
AccountInfo.Loader.Factory accountLoaderFactory) {
|
||||||
this.db = db;
|
this.db = db;
|
||||||
|
this.changeDataFactory = changeDataFactory;
|
||||||
this.labelNormalizer = labelNormalizer;
|
this.labelNormalizer = labelNormalizer;
|
||||||
this.accountLoaderFactory = accountLoaderFactory;
|
this.accountLoaderFactory = accountLoaderFactory;
|
||||||
}
|
}
|
||||||
@@ -98,8 +101,8 @@ public class ReviewerJson {
|
|||||||
|
|
||||||
// Add dummy approvals for all permitted labels for the user even if they
|
// Add dummy approvals for all permitted labels for the user even if they
|
||||||
// do not exist in the DB.
|
// do not exist in the DB.
|
||||||
ChangeData cd = new ChangeData(ctl);
|
ChangeData cd = changeDataFactory.create(db.get(), ctl);
|
||||||
PatchSet ps = cd.currentPatchSet(db);
|
PatchSet ps = cd.currentPatchSet();
|
||||||
if (ps != null) {
|
if (ps != null) {
|
||||||
for (SubmitRecord rec :
|
for (SubmitRecord rec :
|
||||||
ctl.canSubmit(db.get(), ps, cd, true, false, true)) {
|
ctl.canSubmit(db.get(), ps, cd, true, false, true)) {
|
||||||
|
@@ -205,7 +205,7 @@ public class Submit implements RestModifyView<RevisionResource, SubmitInput>,
|
|||||||
} finally {
|
} finally {
|
||||||
db.rollback();
|
db.rollback();
|
||||||
}
|
}
|
||||||
indexer.index(change);
|
indexer.index(db, change);
|
||||||
return change;
|
return change;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -57,6 +57,7 @@ public class TestSubmitRule implements RestModifyView<RevisionResource, Input> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private final ReviewDb db;
|
private final ReviewDb db;
|
||||||
|
private final ChangeData.Factory changeDataFactory;
|
||||||
private final RulesCache rules;
|
private final RulesCache rules;
|
||||||
private final AccountInfo.Loader.Factory accountInfoFactory;
|
private final AccountInfo.Loader.Factory accountInfoFactory;
|
||||||
|
|
||||||
@@ -64,9 +65,12 @@ public class TestSubmitRule implements RestModifyView<RevisionResource, Input> {
|
|||||||
private Filters filters = Filters.RUN;
|
private Filters filters = Filters.RUN;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
TestSubmitRule(ReviewDb db, RulesCache rules,
|
TestSubmitRule(ReviewDb db,
|
||||||
|
ChangeData.Factory changeDataFactory,
|
||||||
|
RulesCache rules,
|
||||||
AccountInfo.Loader.Factory infoFactory) {
|
AccountInfo.Loader.Factory infoFactory) {
|
||||||
this.db = db;
|
this.db = db;
|
||||||
|
this.changeDataFactory = changeDataFactory;
|
||||||
this.rules = rules;
|
this.rules = rules;
|
||||||
this.accountInfoFactory = infoFactory;
|
this.accountInfoFactory = infoFactory;
|
||||||
}
|
}
|
||||||
@@ -88,7 +92,7 @@ public class TestSubmitRule implements RestModifyView<RevisionResource, Input> {
|
|||||||
rsrc.getControl().getProjectControl(),
|
rsrc.getControl().getProjectControl(),
|
||||||
rsrc.getControl(),
|
rsrc.getControl(),
|
||||||
rsrc.getChange(),
|
rsrc.getChange(),
|
||||||
new ChangeData(rsrc.getChange()),
|
changeDataFactory.create(db, rsrc.getChange()),
|
||||||
false,
|
false,
|
||||||
"locate_submit_rule", "can_submit",
|
"locate_submit_rule", "can_submit",
|
||||||
"locate_submit_filter", "filter_submit_results",
|
"locate_submit_filter", "filter_submit_results",
|
||||||
|
@@ -40,14 +40,18 @@ import java.util.List;
|
|||||||
|
|
||||||
public class TestSubmitType implements RestModifyView<RevisionResource, Input> {
|
public class TestSubmitType implements RestModifyView<RevisionResource, Input> {
|
||||||
private final ReviewDb db;
|
private final ReviewDb db;
|
||||||
|
private final ChangeData.Factory changeDataFactory;
|
||||||
private final RulesCache rules;
|
private final RulesCache rules;
|
||||||
|
|
||||||
@Option(name = "--filters", usage = "impact of filters in parent projects")
|
@Option(name = "--filters", usage = "impact of filters in parent projects")
|
||||||
private Filters filters = Filters.RUN;
|
private Filters filters = Filters.RUN;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
TestSubmitType(ReviewDb db, RulesCache rules) {
|
TestSubmitType(ReviewDb db,
|
||||||
|
ChangeData.Factory changeDataFactory,
|
||||||
|
RulesCache rules) {
|
||||||
this.db = db;
|
this.db = db;
|
||||||
|
this.changeDataFactory = changeDataFactory;
|
||||||
this.rules = rules;
|
this.rules = rules;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -68,7 +72,7 @@ public class TestSubmitType implements RestModifyView<RevisionResource, Input> {
|
|||||||
rsrc.getControl().getProjectControl(),
|
rsrc.getControl().getProjectControl(),
|
||||||
rsrc.getControl(),
|
rsrc.getControl(),
|
||||||
rsrc.getChange(),
|
rsrc.getChange(),
|
||||||
new ChangeData(rsrc.getChange()),
|
changeDataFactory.create(db, rsrc.getChange()),
|
||||||
false,
|
false,
|
||||||
"locate_submit_type", "get_submit_type",
|
"locate_submit_type", "get_submit_type",
|
||||||
"locate_submit_type_filter", "filter_submit_type_results",
|
"locate_submit_type_filter", "filter_submit_type_results",
|
||||||
|
@@ -115,6 +115,7 @@ import com.google.gerrit.server.project.ProjectControl;
|
|||||||
import com.google.gerrit.server.project.ProjectNode;
|
import com.google.gerrit.server.project.ProjectNode;
|
||||||
import com.google.gerrit.server.project.ProjectState;
|
import com.google.gerrit.server.project.ProjectState;
|
||||||
import com.google.gerrit.server.project.SectionSortCache;
|
import com.google.gerrit.server.project.SectionSortCache;
|
||||||
|
import com.google.gerrit.server.query.change.ChangeData;
|
||||||
import com.google.gerrit.server.query.change.ChangeQueryBuilder;
|
import com.google.gerrit.server.query.change.ChangeQueryBuilder;
|
||||||
import com.google.gerrit.server.query.change.ConflictsCacheImpl;
|
import com.google.gerrit.server.query.change.ConflictsCacheImpl;
|
||||||
import com.google.gerrit.server.ssh.SshAddressesModule;
|
import com.google.gerrit.server.ssh.SshAddressesModule;
|
||||||
@@ -173,6 +174,7 @@ public class GerritGlobalModule extends FactoryModule {
|
|||||||
factory(AccountInfoCacheFactory.Factory.class);
|
factory(AccountInfoCacheFactory.Factory.class);
|
||||||
factory(AddReviewerSender.Factory.class);
|
factory(AddReviewerSender.Factory.class);
|
||||||
factory(CapabilityControl.Factory.class);
|
factory(CapabilityControl.Factory.class);
|
||||||
|
factory(ChangeData.Factory.class);
|
||||||
factory(ChangeQueryBuilder.Factory.class);
|
factory(ChangeQueryBuilder.Factory.class);
|
||||||
factory(CommitMessageEditedSender.Factory.class);
|
factory(CommitMessageEditedSender.Factory.class);
|
||||||
factory(CreateChangeSender.Factory.class);
|
factory(CreateChangeSender.Factory.class);
|
||||||
|
@@ -48,7 +48,6 @@ import com.google.gerrit.server.data.RefUpdateAttribute;
|
|||||||
import com.google.gerrit.server.data.SubmitLabelAttribute;
|
import com.google.gerrit.server.data.SubmitLabelAttribute;
|
||||||
import com.google.gerrit.server.data.SubmitRecordAttribute;
|
import com.google.gerrit.server.data.SubmitRecordAttribute;
|
||||||
import com.google.gerrit.server.data.TrackingIdAttribute;
|
import com.google.gerrit.server.data.TrackingIdAttribute;
|
||||||
import com.google.gerrit.server.git.GitRepositoryManager;
|
|
||||||
import com.google.gerrit.server.patch.PatchList;
|
import com.google.gerrit.server.patch.PatchList;
|
||||||
import com.google.gerrit.server.patch.PatchListCache;
|
import com.google.gerrit.server.patch.PatchListCache;
|
||||||
import com.google.gerrit.server.patch.PatchListEntry;
|
import com.google.gerrit.server.patch.PatchListEntry;
|
||||||
@@ -82,7 +81,7 @@ public class EventFactory {
|
|||||||
private final PatchSetInfoFactory psInfoFactory;
|
private final PatchSetInfoFactory psInfoFactory;
|
||||||
private final PersonIdent myIdent;
|
private final PersonIdent myIdent;
|
||||||
private final Provider<ReviewDb> db;
|
private final Provider<ReviewDb> db;
|
||||||
private final GitRepositoryManager repoManager;
|
private final ChangeData.Factory changeDataFactory;
|
||||||
private final ApprovalsUtil approvalsUtil;
|
private final ApprovalsUtil approvalsUtil;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
@@ -91,7 +90,8 @@ public class EventFactory {
|
|||||||
PatchSetInfoFactory psif,
|
PatchSetInfoFactory psif,
|
||||||
PatchListCache patchListCache, SchemaFactory<ReviewDb> schema,
|
PatchListCache patchListCache, SchemaFactory<ReviewDb> schema,
|
||||||
@GerritPersonIdent PersonIdent myIdent,
|
@GerritPersonIdent PersonIdent myIdent,
|
||||||
Provider<ReviewDb> db, GitRepositoryManager repoManager,
|
Provider<ReviewDb> db,
|
||||||
|
ChangeData.Factory changeDataFactory,
|
||||||
ApprovalsUtil approvalsUtil) {
|
ApprovalsUtil approvalsUtil) {
|
||||||
this.accountCache = accountCache;
|
this.accountCache = accountCache;
|
||||||
this.urlProvider = urlProvider;
|
this.urlProvider = urlProvider;
|
||||||
@@ -100,7 +100,7 @@ public class EventFactory {
|
|||||||
this.psInfoFactory = psif;
|
this.psInfoFactory = psif;
|
||||||
this.myIdent = myIdent;
|
this.myIdent = myIdent;
|
||||||
this.db = db;
|
this.db = db;
|
||||||
this.repoManager = repoManager;
|
this.changeDataFactory = changeDataFactory;
|
||||||
this.approvalsUtil = approvalsUtil;
|
this.approvalsUtil = approvalsUtil;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -120,7 +120,8 @@ public class EventFactory {
|
|||||||
a.number = change.getId().toString();
|
a.number = change.getId().toString();
|
||||||
a.subject = change.getSubject();
|
a.subject = change.getSubject();
|
||||||
try {
|
try {
|
||||||
a.commitMessage = new ChangeData(change).commitMessage(repoManager, db);
|
a.commitMessage =
|
||||||
|
changeDataFactory.create(db.get(), change).commitMessage();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("Error while getting full commit message for"
|
log.error("Error while getting full commit message for"
|
||||||
+ " change " + a.number);
|
+ " change " + a.number);
|
||||||
|
@@ -841,7 +841,7 @@ public class MergeOp {
|
|||||||
} finally {
|
} finally {
|
||||||
db.rollback();
|
db.rollback();
|
||||||
}
|
}
|
||||||
indexer.index(c);
|
indexer.index(db, c);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setMergedPatchSet(Change.Id changeId, final PatchSet.Id merged)
|
private void setMergedPatchSet(Change.Id changeId, final PatchSet.Id merged)
|
||||||
@@ -1150,7 +1150,7 @@ public class MergeOp {
|
|||||||
msg.setMessage("Project was deleted.");
|
msg.setMessage("Project was deleted.");
|
||||||
db.changeMessages().insert(Collections.singleton(msg));
|
db.changeMessages().insert(Collections.singleton(msg));
|
||||||
db.commit();
|
db.commit();
|
||||||
indexer.index(change);
|
indexer.index(db, change);
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
db.rollback();
|
db.rollback();
|
||||||
|
@@ -2300,7 +2300,7 @@ public class ReceiveCommits {
|
|||||||
return change;
|
return change;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
indexer.index(change);
|
indexer.index(db, change);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void sendMergedEmail(final ReplaceRequest result) {
|
private void sendMergedEmail(final ReplaceRequest result) {
|
||||||
|
@@ -105,16 +105,19 @@ public class ChangeBatchIndexer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private final Provider<ReviewDb> db;
|
private final Provider<ReviewDb> db;
|
||||||
|
private final ChangeData.Factory changeDataFactory;
|
||||||
private final GitRepositoryManager repoManager;
|
private final GitRepositoryManager repoManager;
|
||||||
private final ListeningExecutorService executor;
|
private final ListeningExecutorService executor;
|
||||||
private final ChangeIndexer.Factory indexerFactory;
|
private final ChangeIndexer.Factory indexerFactory;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
ChangeBatchIndexer(Provider<ReviewDb> db,
|
ChangeBatchIndexer(Provider<ReviewDb> db,
|
||||||
|
ChangeData.Factory changeDataFactory,
|
||||||
GitRepositoryManager repoManager,
|
GitRepositoryManager repoManager,
|
||||||
@IndexExecutor ListeningExecutorService executor,
|
@IndexExecutor ListeningExecutorService executor,
|
||||||
ChangeIndexer.Factory indexerFactory) {
|
ChangeIndexer.Factory indexerFactory) {
|
||||||
this.db = db;
|
this.db = db;
|
||||||
|
this.changeDataFactory = changeDataFactory;
|
||||||
this.repoManager = repoManager;
|
this.repoManager = repoManager;
|
||||||
this.executor = executor;
|
this.executor = executor;
|
||||||
this.indexerFactory = indexerFactory;
|
this.indexerFactory = indexerFactory;
|
||||||
@@ -211,7 +214,7 @@ public class ChangeBatchIndexer {
|
|||||||
for (Change c : db.get().changes().byProject(project)) {
|
for (Change c : db.get().changes().byProject(project)) {
|
||||||
Ref r = refs.get(c.currentPatchSetId().toRefName());
|
Ref r = refs.get(c.currentPatchSetId().toRefName());
|
||||||
if (r != null) {
|
if (r != null) {
|
||||||
byId.put(r.getObjectId(), new ChangeData(c));
|
byId.put(r.getObjectId(), changeDataFactory.create(db.get(), c));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
new ProjectIndexer(indexer, byId, repo, done, failed, verboseWriter)
|
new ProjectIndexer(indexer, byId, repo, done, failed, verboseWriter)
|
||||||
|
@@ -64,7 +64,7 @@ public class ChangeField {
|
|||||||
@Override
|
@Override
|
||||||
public String get(ChangeData input, FillArgs args)
|
public String get(ChangeData input, FillArgs args)
|
||||||
throws OrmException {
|
throws OrmException {
|
||||||
return input.change(args.db).getKey().get();
|
return input.change().getKey().get();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -76,7 +76,7 @@ public class ChangeField {
|
|||||||
public String get(ChangeData input, FillArgs args)
|
public String get(ChangeData input, FillArgs args)
|
||||||
throws OrmException {
|
throws OrmException {
|
||||||
return ChangeStatusPredicate.VALUES.get(
|
return ChangeStatusPredicate.VALUES.get(
|
||||||
input.change(args.db).getStatus());
|
input.change().getStatus());
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -87,7 +87,7 @@ public class ChangeField {
|
|||||||
@Override
|
@Override
|
||||||
public String get(ChangeData input, FillArgs args)
|
public String get(ChangeData input, FillArgs args)
|
||||||
throws OrmException {
|
throws OrmException {
|
||||||
return input.change(args.db).getProject().get();
|
return input.change().getProject().get();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -98,7 +98,7 @@ public class ChangeField {
|
|||||||
@Override
|
@Override
|
||||||
public String get(ChangeData input, FillArgs args)
|
public String get(ChangeData input, FillArgs args)
|
||||||
throws OrmException {
|
throws OrmException {
|
||||||
return input.change(args.db).getDest().get();
|
return input.change().getDest().get();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -109,7 +109,7 @@ public class ChangeField {
|
|||||||
@Override
|
@Override
|
||||||
public String get(ChangeData input, FillArgs args)
|
public String get(ChangeData input, FillArgs args)
|
||||||
throws OrmException {
|
throws OrmException {
|
||||||
return input.change(args.db).getTopic();
|
return input.change().getTopic();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -120,7 +120,7 @@ public class ChangeField {
|
|||||||
@Override
|
@Override
|
||||||
public Timestamp get(ChangeData input, FillArgs args)
|
public Timestamp get(ChangeData input, FillArgs args)
|
||||||
throws OrmException {
|
throws OrmException {
|
||||||
return input.change(args.db).getLastUpdatedOn();
|
return input.change().getLastUpdatedOn();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -140,7 +140,7 @@ public class ChangeField {
|
|||||||
@Override
|
@Override
|
||||||
public Long get(ChangeData input, FillArgs args)
|
public Long get(ChangeData input, FillArgs args)
|
||||||
throws OrmException {
|
throws OrmException {
|
||||||
return legacyParseSortKey(input.change(args.db).getSortKey());
|
return legacyParseSortKey(input.change().getSortKey());
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -156,7 +156,7 @@ public class ChangeField {
|
|||||||
@Override
|
@Override
|
||||||
public Long get(ChangeData input, FillArgs args)
|
public Long get(ChangeData input, FillArgs args)
|
||||||
throws OrmException {
|
throws OrmException {
|
||||||
return ChangeUtil.parseSortKey(input.change(args.db).getSortKey());
|
return ChangeUtil.parseSortKey(input.change().getSortKey());
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -167,7 +167,7 @@ public class ChangeField {
|
|||||||
@Override
|
@Override
|
||||||
public Iterable<String> get(ChangeData input, FillArgs args)
|
public Iterable<String> get(ChangeData input, FillArgs args)
|
||||||
throws OrmException {
|
throws OrmException {
|
||||||
return input.currentFilePaths(args.db, args.patchListCache);
|
return input.currentFilePaths();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -178,7 +178,7 @@ public class ChangeField {
|
|||||||
@Override
|
@Override
|
||||||
public Integer get(ChangeData input, FillArgs args)
|
public Integer get(ChangeData input, FillArgs args)
|
||||||
throws OrmException {
|
throws OrmException {
|
||||||
return input.change(args.db).getOwner().get();
|
return input.change().getOwner().get();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -190,7 +190,7 @@ public class ChangeField {
|
|||||||
public Iterable<Integer> get(ChangeData input, FillArgs args)
|
public Iterable<Integer> get(ChangeData input, FillArgs args)
|
||||||
throws OrmException {
|
throws OrmException {
|
||||||
Set<Integer> r = Sets.newHashSet();
|
Set<Integer> r = Sets.newHashSet();
|
||||||
for (PatchSetApproval a : input.allApprovals(args.db)) {
|
for (PatchSetApproval a : input.allApprovals()) {
|
||||||
r.add(a.getAccountId().get());
|
r.add(a.getAccountId().get());
|
||||||
}
|
}
|
||||||
return r;
|
return r;
|
||||||
@@ -205,7 +205,7 @@ public class ChangeField {
|
|||||||
public Iterable<String> get(ChangeData input, FillArgs args)
|
public Iterable<String> get(ChangeData input, FillArgs args)
|
||||||
throws OrmException {
|
throws OrmException {
|
||||||
Set<String> revisions = Sets.newHashSet();
|
Set<String> revisions = Sets.newHashSet();
|
||||||
for (PatchSet ps : input.patches(args.db)) {
|
for (PatchSet ps : input.patches()) {
|
||||||
if (ps.getRevision() != null) {
|
if (ps.getRevision() != null) {
|
||||||
revisions.add(ps.getRevision().get());
|
revisions.add(ps.getRevision().get());
|
||||||
}
|
}
|
||||||
@@ -223,7 +223,7 @@ public class ChangeField {
|
|||||||
throws OrmException {
|
throws OrmException {
|
||||||
try {
|
try {
|
||||||
return Sets.newHashSet(args.trackingFooters.extract(
|
return Sets.newHashSet(args.trackingFooters.extract(
|
||||||
input.commitFooters(args.repoManager, args.db)).values());
|
input.commitFooters()).values());
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new OrmException(e);
|
throw new OrmException(e);
|
||||||
}
|
}
|
||||||
@@ -239,7 +239,7 @@ public class ChangeField {
|
|||||||
throws OrmException {
|
throws OrmException {
|
||||||
Set<String> allApprovals = Sets.newHashSet();
|
Set<String> allApprovals = Sets.newHashSet();
|
||||||
Set<String> distinctApprovals = Sets.newHashSet();
|
Set<String> distinctApprovals = Sets.newHashSet();
|
||||||
for (PatchSetApproval a : input.currentApprovals(args.db)) {
|
for (PatchSetApproval a : input.currentApprovals()) {
|
||||||
if (a.getValue() != 0) {
|
if (a.getValue() != 0) {
|
||||||
allApprovals.add(formatLabel(a.getLabel(), a.getValue(),
|
allApprovals.add(formatLabel(a.getLabel(), a.getValue(),
|
||||||
a.getAccountId()));
|
a.getAccountId()));
|
||||||
@@ -258,7 +258,7 @@ public class ChangeField {
|
|||||||
@Override
|
@Override
|
||||||
public String get(ChangeData input, FillArgs args)
|
public String get(ChangeData input, FillArgs args)
|
||||||
throws OrmException {
|
throws OrmException {
|
||||||
for (PatchSetApproval a : input.currentApprovals(args.db)) {
|
for (PatchSetApproval a : input.currentApprovals()) {
|
||||||
if (a.getValue() != 0) {
|
if (a.getValue() != 0) {
|
||||||
return "1";
|
return "1";
|
||||||
}
|
}
|
||||||
@@ -278,7 +278,7 @@ public class ChangeField {
|
|||||||
@Override
|
@Override
|
||||||
public byte[] get(ChangeData input, FieldDef.FillArgs args)
|
public byte[] get(ChangeData input, FieldDef.FillArgs args)
|
||||||
throws OrmException {
|
throws OrmException {
|
||||||
return CODEC.encodeToByteArray(input.change(args.db));
|
return CODEC.encodeToByteArray(input.change());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -297,7 +297,7 @@ public class ChangeField {
|
|||||||
@Override
|
@Override
|
||||||
public Iterable<byte[]> get(ChangeData input, FillArgs args)
|
public Iterable<byte[]> get(ChangeData input, FillArgs args)
|
||||||
throws OrmException {
|
throws OrmException {
|
||||||
return toProtos(CODEC, input.currentApprovals(args.db));
|
return toProtos(CODEC, input.currentApprovals());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -324,7 +324,7 @@ public class ChangeField {
|
|||||||
@Override
|
@Override
|
||||||
public String get(ChangeData input, FillArgs args) throws OrmException {
|
public String get(ChangeData input, FillArgs args) throws OrmException {
|
||||||
try {
|
try {
|
||||||
return input.commitMessage(args.repoManager, args.db);
|
return input.commitMessage();
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new OrmException(e);
|
throw new OrmException(e);
|
||||||
}
|
}
|
||||||
@@ -339,10 +339,10 @@ public class ChangeField {
|
|||||||
public Iterable<String> get(ChangeData input, FillArgs args)
|
public Iterable<String> get(ChangeData input, FillArgs args)
|
||||||
throws OrmException {
|
throws OrmException {
|
||||||
Set<String> r = Sets.newHashSet();
|
Set<String> r = Sets.newHashSet();
|
||||||
for (PatchLineComment c : input.comments(args.db)) {
|
for (PatchLineComment c : input.comments()) {
|
||||||
r.add(c.getMessage());
|
r.add(c.getMessage());
|
||||||
}
|
}
|
||||||
for (ChangeMessage m : input.messages(args.db)) {
|
for (ChangeMessage m : input.messages()) {
|
||||||
r.add(m.getMessage());
|
r.add(m.getMessage());
|
||||||
}
|
}
|
||||||
return r;
|
return r;
|
||||||
@@ -356,7 +356,7 @@ public class ChangeField {
|
|||||||
@Override
|
@Override
|
||||||
public String get(ChangeData input, FillArgs args)
|
public String get(ChangeData input, FillArgs args)
|
||||||
throws OrmException {
|
throws OrmException {
|
||||||
return input.change(args.db).isMergeable() ? "1" : null;
|
return input.change().isMergeable() ? "1" : null;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -66,7 +66,7 @@ public interface ChangeIndex {
|
|||||||
/**
|
/**
|
||||||
* Delete a change document from the index.
|
* Delete a change document from the index.
|
||||||
*
|
*
|
||||||
* @param cd change document.
|
* @param cd change document
|
||||||
*
|
*
|
||||||
* @throws IOException
|
* @throws IOException
|
||||||
*/
|
*/
|
||||||
|
@@ -77,16 +77,19 @@ public class ChangeIndexer {
|
|||||||
private final IndexCollection indexes;
|
private final IndexCollection indexes;
|
||||||
private final ChangeIndex index;
|
private final ChangeIndex index;
|
||||||
private final SchemaFactory<ReviewDb> schemaFactory;
|
private final SchemaFactory<ReviewDb> schemaFactory;
|
||||||
|
private final ChangeData.Factory changeDataFactory;
|
||||||
private final ThreadLocalRequestContext context;
|
private final ThreadLocalRequestContext context;
|
||||||
private final ListeningExecutorService executor;
|
private final ListeningExecutorService executor;
|
||||||
|
|
||||||
@AssistedInject
|
@AssistedInject
|
||||||
ChangeIndexer(@IndexExecutor ListeningExecutorService executor,
|
ChangeIndexer(@IndexExecutor ListeningExecutorService executor,
|
||||||
SchemaFactory<ReviewDb> schemaFactory,
|
SchemaFactory<ReviewDb> schemaFactory,
|
||||||
|
ChangeData.Factory changeDataFactory,
|
||||||
ThreadLocalRequestContext context,
|
ThreadLocalRequestContext context,
|
||||||
@Assisted ChangeIndex index) {
|
@Assisted ChangeIndex index) {
|
||||||
this.executor = executor;
|
this.executor = executor;
|
||||||
this.schemaFactory = schemaFactory;
|
this.schemaFactory = schemaFactory;
|
||||||
|
this.changeDataFactory = changeDataFactory;
|
||||||
this.context = context;
|
this.context = context;
|
||||||
this.index = index;
|
this.index = index;
|
||||||
this.indexes = null;
|
this.indexes = null;
|
||||||
@@ -95,10 +98,12 @@ public class ChangeIndexer {
|
|||||||
@AssistedInject
|
@AssistedInject
|
||||||
ChangeIndexer(@IndexExecutor ListeningExecutorService executor,
|
ChangeIndexer(@IndexExecutor ListeningExecutorService executor,
|
||||||
SchemaFactory<ReviewDb> schemaFactory,
|
SchemaFactory<ReviewDb> schemaFactory,
|
||||||
|
ChangeData.Factory changeDataFactory,
|
||||||
ThreadLocalRequestContext context,
|
ThreadLocalRequestContext context,
|
||||||
@Assisted IndexCollection indexes) {
|
@Assisted IndexCollection indexes) {
|
||||||
this.executor = executor;
|
this.executor = executor;
|
||||||
this.schemaFactory = schemaFactory;
|
this.schemaFactory = schemaFactory;
|
||||||
|
this.changeDataFactory = changeDataFactory;
|
||||||
this.context = context;
|
this.context = context;
|
||||||
this.index = null;
|
this.index = null;
|
||||||
this.indexes = indexes;
|
this.indexes = indexes;
|
||||||
@@ -112,19 +117,10 @@ public class ChangeIndexer {
|
|||||||
*/
|
*/
|
||||||
public CheckedFuture<?, IOException> indexAsync(Change change) {
|
public CheckedFuture<?, IOException> indexAsync(Change change) {
|
||||||
return executor != null
|
return executor != null
|
||||||
? submit(new Task(new ChangeData(change), false))
|
? submit(new Task(change, false))
|
||||||
: Futures.<Object, IOException> immediateCheckedFuture(null);
|
: Futures.<Object, IOException> immediateCheckedFuture(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Synchronously index a change.
|
|
||||||
*
|
|
||||||
* @param change change to index.
|
|
||||||
*/
|
|
||||||
public void index(Change change) throws IOException {
|
|
||||||
index(new ChangeData(change));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Synchronously index a change.
|
* Synchronously index a change.
|
||||||
*
|
*
|
||||||
@@ -136,6 +132,16 @@ public class ChangeIndexer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Synchronously index a change.
|
||||||
|
*
|
||||||
|
* @param change change to index.
|
||||||
|
* @param db review database.
|
||||||
|
*/
|
||||||
|
public void index(ReviewDb db, Change change) throws IOException {
|
||||||
|
index(changeDataFactory.create(db, change));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Start deleting a change.
|
* Start deleting a change.
|
||||||
*
|
*
|
||||||
@@ -144,19 +150,10 @@ public class ChangeIndexer {
|
|||||||
*/
|
*/
|
||||||
public CheckedFuture<?, IOException> deleteAsync(Change change) {
|
public CheckedFuture<?, IOException> deleteAsync(Change change) {
|
||||||
return executor != null
|
return executor != null
|
||||||
? submit(new Task(new ChangeData(change), true))
|
? submit(new Task(change, true))
|
||||||
: Futures.<Object, IOException> immediateCheckedFuture(null);
|
: Futures.<Object, IOException> immediateCheckedFuture(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Synchronously delete a change.
|
|
||||||
*
|
|
||||||
* @param change change to delete.
|
|
||||||
*/
|
|
||||||
public void delete(Change change) throws IOException {
|
|
||||||
delete(new ChangeData(change));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Synchronously delete a change.
|
* Synchronously delete a change.
|
||||||
*
|
*
|
||||||
@@ -168,6 +165,16 @@ public class ChangeIndexer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Synchronously delete a change.
|
||||||
|
*
|
||||||
|
* @param change change to delete.
|
||||||
|
* @param db review database.
|
||||||
|
*/
|
||||||
|
public void delete(ReviewDb db, Change change) throws IOException {
|
||||||
|
delete(changeDataFactory.create(db, change));
|
||||||
|
}
|
||||||
|
|
||||||
private Collection<ChangeIndex> getWriteIndexes() {
|
private Collection<ChangeIndex> getWriteIndexes() {
|
||||||
return indexes != null
|
return indexes != null
|
||||||
? indexes.getWriteIndexes()
|
? indexes.getWriteIndexes()
|
||||||
@@ -179,11 +186,11 @@ public class ChangeIndexer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private class Task implements Callable<Void> {
|
private class Task implements Callable<Void> {
|
||||||
private final ChangeData cd;
|
private final Change change;
|
||||||
private final boolean delete;
|
private final boolean delete;
|
||||||
|
|
||||||
private Task(ChangeData cd, boolean delete) {
|
private Task(Change change, boolean delete) {
|
||||||
this.cd = cd;
|
this.change = change;
|
||||||
this.delete = delete;
|
this.delete = delete;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -192,7 +199,7 @@ public class ChangeIndexer {
|
|||||||
try {
|
try {
|
||||||
final AtomicReference<Provider<ReviewDb>> dbRef =
|
final AtomicReference<Provider<ReviewDb>> dbRef =
|
||||||
Atomics.newReference();
|
Atomics.newReference();
|
||||||
RequestContext oldCtx = context.setContext(new RequestContext() {
|
RequestContext newCtx = new RequestContext() {
|
||||||
@Override
|
@Override
|
||||||
public Provider<ReviewDb> getReviewDbProvider() {
|
public Provider<ReviewDb> getReviewDbProvider() {
|
||||||
Provider<ReviewDb> db = dbRef.get();
|
Provider<ReviewDb> db = dbRef.get();
|
||||||
@@ -214,8 +221,11 @@ public class ChangeIndexer {
|
|||||||
public CurrentUser getCurrentUser() {
|
public CurrentUser getCurrentUser() {
|
||||||
throw new OutOfScopeException("No user during ChangeIndexer");
|
throw new OutOfScopeException("No user during ChangeIndexer");
|
||||||
}
|
}
|
||||||
});
|
};
|
||||||
|
RequestContext oldCtx = context.setContext(newCtx);
|
||||||
try {
|
try {
|
||||||
|
ChangeData cd = changeDataFactory.create(
|
||||||
|
newCtx.getReviewDbProvider().get(), change);
|
||||||
if (delete) {
|
if (delete) {
|
||||||
for (ChangeIndex i : getWriteIndexes()) {
|
for (ChangeIndex i : getWriteIndexes()) {
|
||||||
i.delete(cd);
|
i.delete(cd);
|
||||||
@@ -236,14 +246,14 @@ public class ChangeIndexer {
|
|||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error(String.format(
|
log.error(String.format(
|
||||||
"Failed to index change %d in %s",
|
"Failed to index change %d in %s",
|
||||||
cd.getId().get(), cd.getChange().getProject().get()), e);
|
change.getId().get(), change.getProject().get()), e);
|
||||||
throw e;
|
throw e;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "index-change-" + cd.getId().get();
|
return "index-change-" + change.getId().get();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -14,13 +14,9 @@
|
|||||||
|
|
||||||
package com.google.gerrit.server.index;
|
package com.google.gerrit.server.index;
|
||||||
|
|
||||||
import com.google.gerrit.reviewdb.server.ReviewDb;
|
|
||||||
import com.google.gerrit.server.config.TrackingFooters;
|
import com.google.gerrit.server.config.TrackingFooters;
|
||||||
import com.google.gerrit.server.git.GitRepositoryManager;
|
|
||||||
import com.google.gerrit.server.patch.PatchListCache;
|
|
||||||
import com.google.gwtorm.server.OrmException;
|
import com.google.gwtorm.server.OrmException;
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
import com.google.inject.Provider;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Definition of a field stored in the secondary index.
|
* Definition of a field stored in the secondary index.
|
||||||
@@ -58,20 +54,11 @@ public abstract class FieldDef<I, T> {
|
|||||||
|
|
||||||
/** Arguments needed to fill in missing data in the input object. */
|
/** Arguments needed to fill in missing data in the input object. */
|
||||||
public static class FillArgs {
|
public static class FillArgs {
|
||||||
final Provider<ReviewDb> db;
|
|
||||||
final GitRepositoryManager repoManager;
|
|
||||||
final TrackingFooters trackingFooters;
|
final TrackingFooters trackingFooters;
|
||||||
final PatchListCache patchListCache;
|
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
FillArgs(Provider<ReviewDb> db,
|
FillArgs(TrackingFooters trackingFooters) {
|
||||||
GitRepositoryManager repoManager,
|
|
||||||
TrackingFooters trackingFooters,
|
|
||||||
PatchListCache patchListCache) {
|
|
||||||
this.db = db;
|
|
||||||
this.repoManager = repoManager;
|
|
||||||
this.trackingFooters = trackingFooters;
|
this.trackingFooters = trackingFooters;
|
||||||
this.patchListCache = patchListCache;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -145,7 +145,7 @@ public class IndexRewriteImpl implements ChangeQueryRewriter {
|
|||||||
|
|
||||||
Predicate<ChangeData> out = rewriteImpl(in, index, limit);
|
Predicate<ChangeData> out = rewriteImpl(in, index, limit);
|
||||||
if (in == out || out instanceof IndexPredicate) {
|
if (in == out || out instanceof IndexPredicate) {
|
||||||
return new IndexedChangeQuery(db, index, out, limit);
|
return new IndexedChangeQuery(index, out, limit);
|
||||||
} else if (out == null /* cannot rewrite */) {
|
} else if (out == null /* cannot rewrite */) {
|
||||||
return in;
|
return in;
|
||||||
} else {
|
} else {
|
||||||
@@ -222,7 +222,7 @@ public class IndexRewriteImpl implements ChangeQueryRewriter {
|
|||||||
if (isIndexed.cardinality() == 1) {
|
if (isIndexed.cardinality() == 1) {
|
||||||
int i = isIndexed.nextSetBit(0);
|
int i = isIndexed.nextSetBit(0);
|
||||||
newChildren.add(
|
newChildren.add(
|
||||||
0, new IndexedChangeQuery(db, index, newChildren.remove(i), limit));
|
0, new IndexedChangeQuery(index, newChildren.remove(i), limit));
|
||||||
return copy(in, newChildren);
|
return copy(in, newChildren);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -242,7 +242,7 @@ public class IndexRewriteImpl implements ChangeQueryRewriter {
|
|||||||
all.add(c);
|
all.add(c);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
all.add(0, new IndexedChangeQuery(db, index, in.copy(indexed), limit));
|
all.add(0, new IndexedChangeQuery(index, in.copy(indexed), limit));
|
||||||
return copy(in, all);
|
return copy(in, all);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -20,7 +20,6 @@ import com.google.common.base.Objects;
|
|||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
import com.google.common.collect.Iterables;
|
import com.google.common.collect.Iterables;
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.google.gerrit.reviewdb.server.ReviewDb;
|
|
||||||
import com.google.gerrit.server.query.Predicate;
|
import com.google.gerrit.server.query.Predicate;
|
||||||
import com.google.gerrit.server.query.QueryParseException;
|
import com.google.gerrit.server.query.QueryParseException;
|
||||||
import com.google.gerrit.server.query.change.ChangeData;
|
import com.google.gerrit.server.query.change.ChangeData;
|
||||||
@@ -29,7 +28,6 @@ import com.google.gerrit.server.query.change.Paginated;
|
|||||||
import com.google.gerrit.server.query.change.SortKeyPredicate;
|
import com.google.gerrit.server.query.change.SortKeyPredicate;
|
||||||
import com.google.gwtorm.server.OrmException;
|
import com.google.gwtorm.server.OrmException;
|
||||||
import com.google.gwtorm.server.ResultSet;
|
import com.google.gwtorm.server.ResultSet;
|
||||||
import com.google.inject.Provider;
|
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
@@ -80,16 +78,14 @@ public class IndexedChangeQuery extends Predicate<ChangeData>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private final Provider<ReviewDb> db;
|
|
||||||
private final ChangeIndex index;
|
private final ChangeIndex index;
|
||||||
private final int limit;
|
private final int limit;
|
||||||
|
|
||||||
private Predicate<ChangeData> pred;
|
private Predicate<ChangeData> pred;
|
||||||
private ChangeDataSource source;
|
private ChangeDataSource source;
|
||||||
|
|
||||||
public IndexedChangeQuery(Provider<ReviewDb> db, ChangeIndex index,
|
public IndexedChangeQuery(ChangeIndex index, Predicate<ChangeData> pred,
|
||||||
Predicate<ChangeData> pred, int limit) throws QueryParseException {
|
int limit) throws QueryParseException {
|
||||||
this.db = db;
|
|
||||||
this.index = index;
|
this.index = index;
|
||||||
this.limit = limit;
|
this.limit = limit;
|
||||||
this.pred = pred;
|
this.pred = pred;
|
||||||
@@ -168,7 +164,7 @@ public class IndexedChangeQuery extends Predicate<ChangeData>
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ResultSet<ChangeData> restart(ChangeData last) throws OrmException {
|
public ResultSet<ChangeData> restart(ChangeData last) throws OrmException {
|
||||||
pred = replaceSortKeyPredicates(pred, last.change(db).getSortKey());
|
pred = replaceSortKeyPredicates(pred, last.change().getSortKey());
|
||||||
try {
|
try {
|
||||||
source = index.getSource(pred, limit);
|
source = index.getSource(pred, limit);
|
||||||
} catch (QueryParseException e) {
|
} catch (QueryParseException e) {
|
||||||
|
@@ -71,7 +71,7 @@ public abstract class ChangeEmail extends NotificationEmail {
|
|||||||
protected ChangeEmail(EmailArguments ea, Change c, String mc) {
|
protected ChangeEmail(EmailArguments ea, Change c, String mc) {
|
||||||
super(ea, mc, c.getProject(), c.getDest());
|
super(ea, mc, c.getProject(), c.getDest());
|
||||||
change = c;
|
change = c;
|
||||||
changeData = new ChangeData(change);
|
changeData = ea.changeDataFactory.create(ea.db.get(), change);
|
||||||
emailOnlyAuthors = false;
|
emailOnlyAuthors = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -31,6 +31,7 @@ import com.google.gerrit.server.git.GitRepositoryManager;
|
|||||||
import com.google.gerrit.server.patch.PatchListCache;
|
import com.google.gerrit.server.patch.PatchListCache;
|
||||||
import com.google.gerrit.server.patch.PatchSetInfoFactory;
|
import com.google.gerrit.server.patch.PatchSetInfoFactory;
|
||||||
import com.google.gerrit.server.project.ProjectCache;
|
import com.google.gerrit.server.project.ProjectCache;
|
||||||
|
import com.google.gerrit.server.query.change.ChangeData;
|
||||||
import com.google.gerrit.server.query.change.ChangeQueryBuilder;
|
import com.google.gerrit.server.query.change.ChangeQueryBuilder;
|
||||||
import com.google.gerrit.server.ssh.SshAdvertisedAddresses;
|
import com.google.gerrit.server.ssh.SshAdvertisedAddresses;
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
@@ -61,6 +62,7 @@ class EmailArguments {
|
|||||||
|
|
||||||
final ChangeQueryBuilder.Factory queryBuilder;
|
final ChangeQueryBuilder.Factory queryBuilder;
|
||||||
final Provider<ReviewDb> db;
|
final Provider<ReviewDb> db;
|
||||||
|
final ChangeData.Factory changeDataFactory;
|
||||||
final RuntimeInstance velocityRuntime;
|
final RuntimeInstance velocityRuntime;
|
||||||
final EmailSettings settings;
|
final EmailSettings settings;
|
||||||
|
|
||||||
@@ -80,6 +82,7 @@ class EmailArguments {
|
|||||||
AllProjectsName allProjectsName,
|
AllProjectsName allProjectsName,
|
||||||
ChangeQueryBuilder.Factory queryBuilder,
|
ChangeQueryBuilder.Factory queryBuilder,
|
||||||
Provider<ReviewDb> db,
|
Provider<ReviewDb> db,
|
||||||
|
ChangeData.Factory changeDataFactory,
|
||||||
RuntimeInstance velocityRuntime,
|
RuntimeInstance velocityRuntime,
|
||||||
EmailSettings settings,
|
EmailSettings settings,
|
||||||
@SshAdvertisedAddresses List<String> sshAddresses) {
|
@SshAdvertisedAddresses List<String> sshAddresses) {
|
||||||
@@ -101,6 +104,7 @@ class EmailArguments {
|
|||||||
this.allProjectsName = allProjectsName;
|
this.allProjectsName = allProjectsName;
|
||||||
this.queryBuilder = queryBuilder;
|
this.queryBuilder = queryBuilder;
|
||||||
this.db = db;
|
this.db = db;
|
||||||
|
this.changeDataFactory = changeDataFactory;
|
||||||
this.velocityRuntime = velocityRuntime;
|
this.velocityRuntime = velocityRuntime;
|
||||||
this.settings = settings;
|
this.settings = settings;
|
||||||
this.sshAddresses = sshAddresses;
|
this.sshAddresses = sshAddresses;
|
||||||
|
@@ -35,7 +35,6 @@ import com.google.gerrit.server.query.change.ChangeData;
|
|||||||
import com.google.gwtorm.server.OrmException;
|
import com.google.gwtorm.server.OrmException;
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
import com.google.inject.Provider;
|
import com.google.inject.Provider;
|
||||||
import com.google.inject.util.Providers;
|
|
||||||
|
|
||||||
import com.googlecode.prolog_cafe.lang.IntegerTerm;
|
import com.googlecode.prolog_cafe.lang.IntegerTerm;
|
||||||
import com.googlecode.prolog_cafe.lang.ListTerm;
|
import com.googlecode.prolog_cafe.lang.ListTerm;
|
||||||
@@ -329,7 +328,7 @@ public class ChangeControl {
|
|||||||
throws OrmException {
|
throws OrmException {
|
||||||
if (getCurrentUser().isIdentifiedUser()) {
|
if (getCurrentUser().isIdentifiedUser()) {
|
||||||
Collection<Account.Id> results = cd != null
|
Collection<Account.Id> results = cd != null
|
||||||
? cd.reviewers(Providers.of(db)).values()
|
? cd.reviewers().values()
|
||||||
: approvalsUtil.getReviewers(db, change.getId()).values();
|
: approvalsUtil.getReviewers(db, change.getId()).values();
|
||||||
IdentifiedUser user = (IdentifiedUser) getCurrentUser();
|
IdentifiedUser user = (IdentifiedUser) getCurrentUser();
|
||||||
return results.contains(user.getAccountId());
|
return results.contains(user.getAccountId());
|
||||||
|
@@ -18,23 +18,19 @@ import static java.util.concurrent.TimeUnit.MILLISECONDS;
|
|||||||
import static java.util.concurrent.TimeUnit.SECONDS;
|
import static java.util.concurrent.TimeUnit.SECONDS;
|
||||||
|
|
||||||
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.server.config.ConfigUtil;
|
import com.google.gerrit.server.config.ConfigUtil;
|
||||||
import com.google.gerrit.server.index.ChangeField;
|
import com.google.gerrit.server.index.ChangeField;
|
||||||
import com.google.gerrit.server.index.TimestampRangePredicate;
|
import com.google.gerrit.server.index.TimestampRangePredicate;
|
||||||
import com.google.gerrit.server.util.TimeUtil;
|
import com.google.gerrit.server.util.TimeUtil;
|
||||||
import com.google.gwtorm.server.OrmException;
|
import com.google.gwtorm.server.OrmException;
|
||||||
import com.google.inject.Provider;
|
|
||||||
|
|
||||||
import java.sql.Timestamp;
|
import java.sql.Timestamp;
|
||||||
|
|
||||||
public class AgePredicate extends TimestampRangePredicate<ChangeData> {
|
public class AgePredicate extends TimestampRangePredicate<ChangeData> {
|
||||||
private final Provider<ReviewDb> dbProvider;
|
|
||||||
private final long cut;
|
private final long cut;
|
||||||
|
|
||||||
AgePredicate(Provider<ReviewDb> dbProvider, String value) {
|
AgePredicate(String value) {
|
||||||
super(ChangeField.UPDATED, ChangeQueryBuilder.FIELD_AGE, value);
|
super(ChangeField.UPDATED, ChangeQueryBuilder.FIELD_AGE, value);
|
||||||
this.dbProvider = dbProvider;
|
|
||||||
|
|
||||||
long s = ConfigUtil.getTimeUnit(getValue(), 0, SECONDS);
|
long s = ConfigUtil.getTimeUnit(getValue(), 0, SECONDS);
|
||||||
long ms = MILLISECONDS.convert(s, SECONDS);
|
long ms = MILLISECONDS.convert(s, SECONDS);
|
||||||
@@ -55,7 +51,7 @@ public class AgePredicate extends TimestampRangePredicate<ChangeData> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean match(final ChangeData object) throws OrmException {
|
public boolean match(final ChangeData object) throws OrmException {
|
||||||
Change change = object.change(dbProvider);
|
Change change = object.change();
|
||||||
return change != null && change.getLastUpdatedOn().getTime() <= cut;
|
return change != null && change.getLastUpdatedOn().getTime() <= cut;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -35,7 +35,7 @@ public class BasicChangeRewrites extends QueryRewriter<ChangeData> {
|
|||||||
new InvalidProvider<ReviewDb>(), //
|
new InvalidProvider<ReviewDb>(), //
|
||||||
new InvalidProvider<ChangeQueryRewriter>(), //
|
new InvalidProvider<ChangeQueryRewriter>(), //
|
||||||
null, null, null, null, null, null, null, //
|
null, null, null, null, null, null, null, //
|
||||||
null, null, null, null, null, null, null, null), null);
|
null, null, null, null, null, null, null, null, null), null);
|
||||||
|
|
||||||
private static final QueryRewriter.Definition<ChangeData, BasicChangeRewrites> mydef =
|
private static final QueryRewriter.Definition<ChangeData, BasicChangeRewrites> mydef =
|
||||||
new QueryRewriter.Definition<ChangeData, BasicChangeRewrites>(
|
new QueryRewriter.Definition<ChangeData, BasicChangeRewrites>(
|
||||||
@@ -73,7 +73,7 @@ public class BasicChangeRewrites extends QueryRewriter<ChangeData> {
|
|||||||
@Rewrite("-status:merged")
|
@Rewrite("-status:merged")
|
||||||
public Predicate<ChangeData> r00_notMerged() {
|
public Predicate<ChangeData> r00_notMerged() {
|
||||||
return or(ChangeStatusPredicate.open(dbProvider),
|
return or(ChangeStatusPredicate.open(dbProvider),
|
||||||
new ChangeStatusPredicate(dbProvider, Change.Status.ABANDONED));
|
new ChangeStatusPredicate(Change.Status.ABANDONED));
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
@@ -81,7 +81,7 @@ public class BasicChangeRewrites extends QueryRewriter<ChangeData> {
|
|||||||
@Rewrite("-status:abandoned")
|
@Rewrite("-status:abandoned")
|
||||||
public Predicate<ChangeData> r00_notAbandoned() {
|
public Predicate<ChangeData> r00_notAbandoned() {
|
||||||
return or(ChangeStatusPredicate.open(dbProvider),
|
return or(ChangeStatusPredicate.open(dbProvider),
|
||||||
new ChangeStatusPredicate(dbProvider, Change.Status.MERGED));
|
new ChangeStatusPredicate(Change.Status.MERGED));
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
|
@@ -16,6 +16,7 @@ package com.google.gerrit.server.query.change;
|
|||||||
|
|
||||||
import static com.google.gerrit.server.ApprovalsUtil.sortApprovals;
|
import static com.google.gerrit.server.ApprovalsUtil.sortApprovals;
|
||||||
|
|
||||||
|
import com.google.common.annotations.VisibleForTesting;
|
||||||
import com.google.common.base.Objects;
|
import com.google.common.base.Objects;
|
||||||
import com.google.common.collect.ArrayListMultimap;
|
import com.google.common.collect.ArrayListMultimap;
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
@@ -45,6 +46,8 @@ import com.google.gerrit.server.project.ChangeControl;
|
|||||||
import com.google.gwtorm.server.OrmException;
|
import com.google.gwtorm.server.OrmException;
|
||||||
import com.google.gwtorm.server.ResultSet;
|
import com.google.gwtorm.server.ResultSet;
|
||||||
import com.google.inject.Provider;
|
import com.google.inject.Provider;
|
||||||
|
import com.google.inject.assistedinject.Assisted;
|
||||||
|
import com.google.inject.assistedinject.AssistedInject;
|
||||||
|
|
||||||
import org.eclipse.jgit.errors.IncorrectObjectTypeException;
|
import org.eclipse.jgit.errors.IncorrectObjectTypeException;
|
||||||
import org.eclipse.jgit.errors.MissingObjectException;
|
import org.eclipse.jgit.errors.MissingObjectException;
|
||||||
@@ -82,7 +85,7 @@ public class ChangeData {
|
|||||||
public static void ensureAllPatchSetsLoaded(Provider<ReviewDb> db,
|
public static void ensureAllPatchSetsLoaded(Provider<ReviewDb> db,
|
||||||
Iterable<ChangeData> changes) throws OrmException {
|
Iterable<ChangeData> changes) throws OrmException {
|
||||||
for (ChangeData cd : changes) {
|
for (ChangeData cd : changes) {
|
||||||
cd.patches(db);
|
cd.patches();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -91,7 +94,7 @@ public class ChangeData {
|
|||||||
Map<PatchSet.Id, ChangeData> missing = Maps.newHashMap();
|
Map<PatchSet.Id, ChangeData> missing = Maps.newHashMap();
|
||||||
for (ChangeData cd : changes) {
|
for (ChangeData cd : changes) {
|
||||||
if (cd.currentPatchSet == null && cd.patches == null) {
|
if (cd.currentPatchSet == null && cd.patches == null) {
|
||||||
missing.put(cd.change(db).currentPatchSetId(), cd);
|
missing.put(cd.change().currentPatchSetId(), cd);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!missing.isEmpty()) {
|
if (!missing.isEmpty()) {
|
||||||
@@ -111,7 +114,7 @@ public class ChangeData {
|
|||||||
for (ChangeData cd : changes) {
|
for (ChangeData cd : changes) {
|
||||||
if (cd.currentApprovals == null && cd.limitedApprovals == null) {
|
if (cd.currentApprovals == null && cd.limitedApprovals == null) {
|
||||||
pending.add(db.get().patchSetApprovals()
|
pending.add(db.get().patchSetApprovals()
|
||||||
.byPatchSet(cd.change(db).currentPatchSetId()));
|
.byPatchSet(cd.change().currentPatchSetId()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!pending.isEmpty()) {
|
if (!pending.isEmpty()) {
|
||||||
@@ -124,6 +127,15 @@ public class ChangeData {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public interface Factory {
|
||||||
|
ChangeData create(ReviewDb db, Change.Id id);
|
||||||
|
ChangeData create(ReviewDb db, Change c);
|
||||||
|
ChangeData create(ReviewDb db, ChangeControl c);
|
||||||
|
}
|
||||||
|
|
||||||
|
private final ReviewDb db;
|
||||||
|
private final GitRepositoryManager repoManager;
|
||||||
|
private final PatchListCache patchListCache;
|
||||||
private final Change.Id legacyId;
|
private final Change.Id legacyId;
|
||||||
private ChangeDataSource returnedBySource;
|
private ChangeDataSource returnedBySource;
|
||||||
private Change change;
|
private Change change;
|
||||||
@@ -144,16 +156,41 @@ public class ChangeData {
|
|||||||
private ChangedLines changedLines;
|
private ChangedLines changedLines;
|
||||||
private boolean patchesLoaded;
|
private boolean patchesLoaded;
|
||||||
|
|
||||||
public ChangeData(final Change.Id id) {
|
@VisibleForTesting
|
||||||
|
@AssistedInject
|
||||||
|
public ChangeData(
|
||||||
|
GitRepositoryManager repoManager,
|
||||||
|
PatchListCache patchListCache,
|
||||||
|
@Assisted ReviewDb db,
|
||||||
|
@Assisted Change.Id id) {
|
||||||
|
this.db = db;
|
||||||
|
this.repoManager = repoManager;
|
||||||
|
this.patchListCache = patchListCache;
|
||||||
legacyId = id;
|
legacyId = id;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ChangeData(final Change c) {
|
@AssistedInject
|
||||||
|
ChangeData(
|
||||||
|
GitRepositoryManager repoManager,
|
||||||
|
PatchListCache patchListCache,
|
||||||
|
@Assisted ReviewDb db,
|
||||||
|
@Assisted Change c) {
|
||||||
|
this.db = db;
|
||||||
|
this.repoManager = repoManager;
|
||||||
|
this.patchListCache = patchListCache;
|
||||||
legacyId = c.getId();
|
legacyId = c.getId();
|
||||||
change = c;
|
change = c;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ChangeData(final ChangeControl c) {
|
@AssistedInject
|
||||||
|
ChangeData(
|
||||||
|
GitRepositoryManager repoManager,
|
||||||
|
PatchListCache patchListCache,
|
||||||
|
@Assisted ReviewDb db,
|
||||||
|
@Assisted ChangeControl c) {
|
||||||
|
this.db = db;
|
||||||
|
this.repoManager = repoManager;
|
||||||
|
this.patchListCache = patchListCache;
|
||||||
legacyId = c.getChange().getId();
|
legacyId = c.getChange().getId();
|
||||||
change = c.getChange();
|
change = c.getChange();
|
||||||
changeControl = c;
|
changeControl = c;
|
||||||
@@ -186,21 +223,20 @@ public class ChangeData {
|
|||||||
currentFiles = ImmutableList.copyOf(filePaths);
|
currentFiles = ImmutableList.copyOf(filePaths);
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<String> currentFilePaths(Provider<ReviewDb> db,
|
public List<String> currentFilePaths() throws OrmException {
|
||||||
PatchListCache cache) throws OrmException {
|
|
||||||
if (currentFiles == null) {
|
if (currentFiles == null) {
|
||||||
Change c = change(db);
|
Change c = change();
|
||||||
if (c == null) {
|
if (c == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
PatchSet ps = currentPatchSet(db);
|
PatchSet ps = currentPatchSet();
|
||||||
if (ps == null) {
|
if (ps == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
PatchList p;
|
PatchList p;
|
||||||
try {
|
try {
|
||||||
p = cache.get(c, ps);
|
p = patchListCache.get(c, ps);
|
||||||
} catch (PatchListNotAvailableException e) {
|
} catch (PatchListNotAvailableException e) {
|
||||||
currentFiles = Collections.emptyList();
|
currentFiles = Collections.emptyList();
|
||||||
return currentFiles;
|
return currentFiles;
|
||||||
@@ -232,22 +268,21 @@ public class ChangeData {
|
|||||||
return currentFiles;
|
return currentFiles;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ChangedLines changedLines(Provider<ReviewDb> db,
|
public ChangedLines changedLines() throws OrmException {
|
||||||
PatchListCache cache) throws OrmException {
|
|
||||||
if (changedLines == null) {
|
if (changedLines == null) {
|
||||||
Change c = change(db);
|
Change c = change();
|
||||||
if (c == null) {
|
if (c == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
PatchSet ps = currentPatchSet(db);
|
PatchSet ps = currentPatchSet();
|
||||||
if (ps == null) {
|
if (ps == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
PatchList p;
|
PatchList p;
|
||||||
try {
|
try {
|
||||||
p = cache.get(c, ps);
|
p = patchListCache.get(c, ps);
|
||||||
} catch (PatchListNotAvailableException e) {
|
} catch (PatchListNotAvailableException e) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -282,9 +317,9 @@ public class ChangeData {
|
|||||||
changeControl = ctl;
|
changeControl = ctl;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Change change(Provider<ReviewDb> db) throws OrmException {
|
public Change change() throws OrmException {
|
||||||
if (change == null) {
|
if (change == null) {
|
||||||
change = db.get().changes().get(legacyId);
|
change = db.changes().get(legacyId);
|
||||||
}
|
}
|
||||||
return change;
|
return change;
|
||||||
}
|
}
|
||||||
@@ -293,13 +328,13 @@ public class ChangeData {
|
|||||||
change = c;
|
change = c;
|
||||||
}
|
}
|
||||||
|
|
||||||
public PatchSet currentPatchSet(Provider<ReviewDb> db) throws OrmException {
|
public PatchSet currentPatchSet() throws OrmException {
|
||||||
if (currentPatchSet == null) {
|
if (currentPatchSet == null) {
|
||||||
Change c = change(db);
|
Change c = change();
|
||||||
if (c == null) {
|
if (c == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
for (PatchSet p : patches(db)) {
|
for (PatchSet p : patches()) {
|
||||||
if (p.getId().equals(c.currentPatchSetId())) {
|
if (p.getId().equals(c.currentPatchSetId())) {
|
||||||
currentPatchSet = p;
|
currentPatchSet = p;
|
||||||
return p;
|
return p;
|
||||||
@@ -309,10 +344,10 @@ public class ChangeData {
|
|||||||
return currentPatchSet;
|
return currentPatchSet;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<PatchSetApproval> currentApprovals(Provider<ReviewDb> db)
|
public List<PatchSetApproval> currentApprovals()
|
||||||
throws OrmException {
|
throws OrmException {
|
||||||
if (currentApprovals == null) {
|
if (currentApprovals == null) {
|
||||||
Change c = change(db);
|
Change c = change();
|
||||||
if (c == null) {
|
if (c == null) {
|
||||||
currentApprovals = Collections.emptyList();
|
currentApprovals = Collections.emptyList();
|
||||||
} else if (allApprovals != null) {
|
} else if (allApprovals != null) {
|
||||||
@@ -321,7 +356,7 @@ public class ChangeData {
|
|||||||
(limitedIds == null || limitedIds.contains(c.currentPatchSetId()))) {
|
(limitedIds == null || limitedIds.contains(c.currentPatchSetId()))) {
|
||||||
return limitedApprovals.get(c.currentPatchSetId());
|
return limitedApprovals.get(c.currentPatchSetId());
|
||||||
} else {
|
} else {
|
||||||
currentApprovals = sortApprovals(db.get().patchSetApprovals()
|
currentApprovals = sortApprovals(db.patchSetApprovals()
|
||||||
.byPatchSet(c.currentPatchSetId()));
|
.byPatchSet(c.currentPatchSetId()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -332,27 +367,25 @@ public class ChangeData {
|
|||||||
currentApprovals = approvals;
|
currentApprovals = approvals;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String commitMessage(GitRepositoryManager repoManager,
|
public String commitMessage() throws IOException, OrmException {
|
||||||
Provider<ReviewDb> db) throws IOException, OrmException {
|
|
||||||
if (commitMessage == null) {
|
if (commitMessage == null) {
|
||||||
loadCommitData(repoManager, db);
|
loadCommitData();
|
||||||
}
|
}
|
||||||
return commitMessage;
|
return commitMessage;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<FooterLine> commitFooters(GitRepositoryManager repoManager,
|
public List<FooterLine> commitFooters() throws IOException, OrmException {
|
||||||
Provider<ReviewDb> db) throws IOException, OrmException {
|
|
||||||
if (commitFooters == null) {
|
if (commitFooters == null) {
|
||||||
loadCommitData(repoManager, db);
|
loadCommitData();
|
||||||
}
|
}
|
||||||
return commitFooters;
|
return commitFooters;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void loadCommitData(GitRepositoryManager repoManager,
|
private void loadCommitData() throws OrmException,
|
||||||
Provider<ReviewDb> db) throws OrmException, RepositoryNotFoundException,
|
RepositoryNotFoundException, IOException, MissingObjectException,
|
||||||
IOException, MissingObjectException, IncorrectObjectTypeException {
|
IncorrectObjectTypeException {
|
||||||
PatchSet.Id psId = change(db).currentPatchSetId();
|
PatchSet.Id psId = change().currentPatchSetId();
|
||||||
String sha1 = db.get().patchSets().get(psId).getRevision().get();
|
String sha1 = db.patchSets().get(psId).getRevision().get();
|
||||||
Repository repo = repoManager.openRepository(change.getProject());
|
Repository repo = repoManager.openRepository(change.getProject());
|
||||||
try {
|
try {
|
||||||
RevWalk walk = new RevWalk(repo);
|
RevWalk walk = new RevWalk(repo);
|
||||||
@@ -369,23 +402,22 @@ public class ChangeData {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param db review database.
|
|
||||||
* @return patches for the change. If {@link #limitToPatchSets(Collection)}
|
* @return patches for the change. If {@link #limitToPatchSets(Collection)}
|
||||||
* was previously called, only contains patches with the specified IDs.
|
* was previously called, only contains patches with the specified IDs.
|
||||||
* @throws OrmException an error occurred reading the database.
|
* @throws OrmException an error occurred reading the database.
|
||||||
*/
|
*/
|
||||||
public Collection<PatchSet> patches(Provider<ReviewDb> db)
|
public Collection<PatchSet> patches()
|
||||||
throws OrmException {
|
throws OrmException {
|
||||||
if (patches == null || !patchesLoaded) {
|
if (patches == null || !patchesLoaded) {
|
||||||
if (limitedIds != null) {
|
if (limitedIds != null) {
|
||||||
patches = Lists.newArrayList();
|
patches = Lists.newArrayList();
|
||||||
for (PatchSet ps : db.get().patchSets().byChange(legacyId)) {
|
for (PatchSet ps : db.patchSets().byChange(legacyId)) {
|
||||||
if (limitedIds.contains(ps.getId())) {
|
if (limitedIds.contains(ps.getId())) {
|
||||||
patches.add(ps);
|
patches.add(ps);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
patches = db.get().patchSets().byChange(legacyId).toList();
|
patches = db.patchSets().byChange(legacyId).toList();
|
||||||
}
|
}
|
||||||
patchesLoaded = true;
|
patchesLoaded = true;
|
||||||
}
|
}
|
||||||
@@ -393,27 +425,25 @@ public class ChangeData {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param db review database.
|
|
||||||
* @return patch set approvals for the change in timestamp order. If
|
* @return patch set approvals for the change in timestamp order. If
|
||||||
* {@link #limitToPatchSets(Collection)} was previously called, only contains
|
* {@link #limitToPatchSets(Collection)} was previously called, only contains
|
||||||
* approvals for the patches with the specified IDs.
|
* approvals for the patches with the specified IDs.
|
||||||
* @throws OrmException an error occurred reading the database.
|
* @throws OrmException an error occurred reading the database.
|
||||||
*/
|
*/
|
||||||
public List<PatchSetApproval> approvals(Provider<ReviewDb> db)
|
public List<PatchSetApproval> approvals()
|
||||||
throws OrmException {
|
throws OrmException {
|
||||||
return ImmutableList.copyOf(approvalsMap(db).values());
|
return ImmutableList.copyOf(approvalsMap().values());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param db review database.
|
|
||||||
* @return patch set approvals for the change, keyed by ID, ordered by
|
* @return patch set approvals for the change, keyed by ID, ordered by
|
||||||
* timestamp within each patch set. If
|
* timestamp within each patch set. If
|
||||||
* {@link #limitToPatchSets(Collection)} was previously called, only
|
* {@link #limitToPatchSets(Collection)} was previously called, only
|
||||||
* contains approvals for the patches with the specified IDs.
|
* contains approvals for the patches with the specified IDs.
|
||||||
* @throws OrmException an error occurred reading the database.
|
* @throws OrmException an error occurred reading the database.
|
||||||
*/
|
*/
|
||||||
public ListMultimap<PatchSet.Id, PatchSetApproval> approvalsMap(
|
public ListMultimap<PatchSet.Id, PatchSetApproval> approvalsMap()
|
||||||
Provider<ReviewDb> db) throws OrmException {
|
throws OrmException {
|
||||||
if (limitedApprovals == null) {
|
if (limitedApprovals == null) {
|
||||||
limitedApprovals = ArrayListMultimap.create();
|
limitedApprovals = ArrayListMultimap.create();
|
||||||
if (allApprovals != null) {
|
if (allApprovals != null) {
|
||||||
@@ -422,7 +452,7 @@ public class ChangeData {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for (PatchSetApproval psa : sortApprovals(
|
for (PatchSetApproval psa : sortApprovals(
|
||||||
db.get().patchSetApprovals().byChange(legacyId))) {
|
db.patchSetApprovals().byChange(legacyId))) {
|
||||||
if (limitedIds == null || limitedIds.contains(legacyId)) {
|
if (limitedIds == null || limitedIds.contains(legacyId)) {
|
||||||
limitedApprovals.put(psa.getPatchSetId(), psa);
|
limitedApprovals.put(psa.getPatchSetId(), psa);
|
||||||
}
|
}
|
||||||
@@ -433,53 +463,51 @@ public class ChangeData {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param db review database.
|
|
||||||
* @return all patch set approvals for the change in timestamp order
|
* @return all patch set approvals for the change in timestamp order
|
||||||
* (regardless of whether {@link #limitToPatchSets(Collection)} was
|
* (regardless of whether {@link #limitToPatchSets(Collection)} was
|
||||||
* previously called).
|
* previously called).
|
||||||
* @throws OrmException an error occurred reading the database.
|
* @throws OrmException an error occurred reading the database.
|
||||||
*/
|
*/
|
||||||
public List<PatchSetApproval> allApprovals(Provider<ReviewDb> db)
|
public List<PatchSetApproval> allApprovals()
|
||||||
throws OrmException {
|
throws OrmException {
|
||||||
return ImmutableList.copyOf(allApprovalsMap(db).values());
|
return ImmutableList.copyOf(allApprovalsMap().values());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param db review database.
|
|
||||||
* @return all patch set approvals for the change (regardless of whether
|
* @return all patch set approvals for the change (regardless of whether
|
||||||
* {@link #limitToPatchSets(Collection)} was previously called), keyed by
|
* {@link #limitToPatchSets(Collection)} was previously called), keyed by
|
||||||
* ID, ordered by timestamp within each patch set.
|
* ID, ordered by timestamp within each patch set.
|
||||||
* @throws OrmException an error occurred reading the database.
|
* @throws OrmException an error occurred reading the database.
|
||||||
*/
|
*/
|
||||||
public ListMultimap<PatchSet.Id, PatchSetApproval> allApprovalsMap(
|
public ListMultimap<PatchSet.Id, PatchSetApproval> allApprovalsMap()
|
||||||
Provider<ReviewDb> db) throws OrmException {
|
throws OrmException {
|
||||||
if (allApprovals == null) {
|
if (allApprovals == null) {
|
||||||
allApprovals = ArrayListMultimap.create();
|
allApprovals = ArrayListMultimap.create();
|
||||||
for (PatchSetApproval psa : sortApprovals(
|
for (PatchSetApproval psa : sortApprovals(
|
||||||
db.get().patchSetApprovals().byChange(legacyId))) {
|
db.patchSetApprovals().byChange(legacyId))) {
|
||||||
allApprovals.put(psa.getPatchSetId(), psa);
|
allApprovals.put(psa.getPatchSetId(), psa);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return allApprovals;
|
return allApprovals;
|
||||||
}
|
}
|
||||||
|
|
||||||
public SetMultimap<ReviewerState, Account.Id> reviewers(Provider<ReviewDb> db)
|
public SetMultimap<ReviewerState, Account.Id> reviewers()
|
||||||
throws OrmException {
|
throws OrmException {
|
||||||
return ApprovalsUtil.getReviewers(allApprovals(db));
|
return ApprovalsUtil.getReviewers(allApprovals());
|
||||||
}
|
}
|
||||||
|
|
||||||
public Collection<PatchLineComment> comments(Provider<ReviewDb> db)
|
public Collection<PatchLineComment> comments()
|
||||||
throws OrmException {
|
throws OrmException {
|
||||||
if (comments == null) {
|
if (comments == null) {
|
||||||
comments = db.get().patchComments().byChange(legacyId).toList();
|
comments = db.patchComments().byChange(legacyId).toList();
|
||||||
}
|
}
|
||||||
return comments;
|
return comments;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<ChangeMessage> messages(Provider<ReviewDb> db)
|
public List<ChangeMessage> messages()
|
||||||
throws OrmException {
|
throws OrmException {
|
||||||
if (messages == null) {
|
if (messages == null) {
|
||||||
messages = db.get().changeMessages().byChange(legacyId).toList();
|
messages = db.changeMessages().byChange(legacyId).toList();
|
||||||
}
|
}
|
||||||
return messages;
|
return messages;
|
||||||
}
|
}
|
||||||
|
@@ -16,38 +16,31 @@ 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.client.PatchSet;
|
import com.google.gerrit.reviewdb.client.PatchSet;
|
||||||
import com.google.gerrit.reviewdb.client.PatchSetApproval;
|
import com.google.gerrit.reviewdb.server.ReviewDb;
|
||||||
import com.google.gwtorm.server.ResultSet;
|
import com.google.gwtorm.server.ResultSet;
|
||||||
|
import com.google.inject.Provider;
|
||||||
|
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.NoSuchElementException;
|
import java.util.NoSuchElementException;
|
||||||
|
|
||||||
abstract class ChangeDataResultSet<T> extends AbstractResultSet<ChangeData> {
|
abstract class ChangeDataResultSet<T> extends AbstractResultSet<ChangeData> {
|
||||||
static ResultSet<ChangeData> change(final ResultSet<Change> rs) {
|
static ResultSet<ChangeData> change(final ChangeData.Factory factory,
|
||||||
|
final Provider<ReviewDb> db, final ResultSet<Change> rs) {
|
||||||
return new ChangeDataResultSet<Change>(rs, true) {
|
return new ChangeDataResultSet<Change>(rs, true) {
|
||||||
@Override
|
@Override
|
||||||
ChangeData convert(Change t) {
|
ChangeData convert(Change t) {
|
||||||
return new ChangeData(t);
|
return factory.create(db.get(), t);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
static ResultSet<ChangeData> patchSet(final ResultSet<PatchSet> rs) {
|
static ResultSet<ChangeData> patchSet(final ChangeData.Factory factory,
|
||||||
|
final Provider<ReviewDb> db, final ResultSet<PatchSet> rs) {
|
||||||
return new ChangeDataResultSet<PatchSet>(rs, false) {
|
return new ChangeDataResultSet<PatchSet>(rs, false) {
|
||||||
@Override
|
@Override
|
||||||
ChangeData convert(PatchSet t) {
|
ChangeData convert(PatchSet t) {
|
||||||
return new ChangeData(t.getId().getParentKey());
|
return factory.create(db.get(), t.getId().getParentKey());
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
static ResultSet<ChangeData> patchSetApproval(
|
|
||||||
final ResultSet<PatchSetApproval> rs) {
|
|
||||||
return new ChangeDataResultSet<PatchSetApproval>(rs, false) {
|
|
||||||
@Override
|
|
||||||
ChangeData convert(PatchSetApproval t) {
|
|
||||||
return new ChangeData(t.getPatchSetId().getParentKey());
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@@ -15,25 +15,24 @@
|
|||||||
package com.google.gerrit.server.query.change;
|
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.server.index.ChangeField;
|
import com.google.gerrit.server.index.ChangeField;
|
||||||
import com.google.gerrit.server.index.IndexPredicate;
|
import com.google.gerrit.server.index.IndexPredicate;
|
||||||
|
import com.google.gerrit.server.query.change.ChangeQueryBuilder.Arguments;
|
||||||
import com.google.gwtorm.server.OrmException;
|
import com.google.gwtorm.server.OrmException;
|
||||||
import com.google.gwtorm.server.ResultSet;
|
import com.google.gwtorm.server.ResultSet;
|
||||||
import com.google.inject.Provider;
|
|
||||||
|
|
||||||
class ChangeIdPredicate extends IndexPredicate<ChangeData> implements
|
class ChangeIdPredicate extends IndexPredicate<ChangeData> implements
|
||||||
ChangeDataSource {
|
ChangeDataSource {
|
||||||
private final Provider<ReviewDb> dbProvider;
|
private final Arguments args;
|
||||||
|
|
||||||
ChangeIdPredicate(Provider<ReviewDb> dbProvider, String id) {
|
ChangeIdPredicate(Arguments args, String id) {
|
||||||
super(ChangeField.ID, ChangeQueryBuilder.FIELD_CHANGE, id);
|
super(ChangeField.ID, ChangeQueryBuilder.FIELD_CHANGE, id);
|
||||||
this.dbProvider = dbProvider;
|
this.args = args;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean match(final ChangeData cd) throws OrmException {
|
public boolean match(final ChangeData cd) throws OrmException {
|
||||||
Change change = cd.change(dbProvider);
|
Change change = cd.change();
|
||||||
if (change == null) {
|
if (change == null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -49,8 +48,8 @@ class ChangeIdPredicate extends IndexPredicate<ChangeData> implements
|
|||||||
public ResultSet<ChangeData> read() throws OrmException {
|
public ResultSet<ChangeData> read() throws OrmException {
|
||||||
Change.Key a = new Change.Key(getValue());
|
Change.Key a = new Change.Key(getValue());
|
||||||
Change.Key b = a.max();
|
Change.Key b = a.max();
|
||||||
return ChangeDataResultSet.change( //
|
return ChangeDataResultSet.change(args.changeDataFactory, args.db,
|
||||||
dbProvider.get().changes().byKeyRange(a, b));
|
args.db.get().changes().byKeyRange(a, b));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -142,12 +142,13 @@ public class ChangeQueryBuilder extends QueryBuilder<ChangeData> {
|
|||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
public static class Arguments {
|
public static class Arguments {
|
||||||
final Provider<ReviewDb> dbProvider;
|
final Provider<ReviewDb> db;
|
||||||
final Provider<ChangeQueryRewriter> rewriter;
|
final Provider<ChangeQueryRewriter> rewriter;
|
||||||
final IdentifiedUser.GenericFactory userFactory;
|
final IdentifiedUser.GenericFactory userFactory;
|
||||||
final Provider<CurrentUser> self;
|
final Provider<CurrentUser> self;
|
||||||
final CapabilityControl.Factory capabilityControlFactory;
|
final CapabilityControl.Factory capabilityControlFactory;
|
||||||
final ChangeControl.GenericFactory changeControlGenericFactory;
|
final ChangeControl.GenericFactory changeControlGenericFactory;
|
||||||
|
final ChangeData.Factory changeDataFactory;
|
||||||
final AccountResolver accountResolver;
|
final AccountResolver accountResolver;
|
||||||
final GroupBackend groupBackend;
|
final GroupBackend groupBackend;
|
||||||
final AllProjectsName allProjectsName;
|
final AllProjectsName allProjectsName;
|
||||||
@@ -168,6 +169,7 @@ public class ChangeQueryBuilder extends QueryBuilder<ChangeData> {
|
|||||||
Provider<CurrentUser> self,
|
Provider<CurrentUser> self,
|
||||||
CapabilityControl.Factory capabilityControlFactory,
|
CapabilityControl.Factory capabilityControlFactory,
|
||||||
ChangeControl.GenericFactory changeControlGenericFactory,
|
ChangeControl.GenericFactory changeControlGenericFactory,
|
||||||
|
ChangeData.Factory changeDataFactory,
|
||||||
AccountResolver accountResolver,
|
AccountResolver accountResolver,
|
||||||
GroupBackend groupBackend,
|
GroupBackend groupBackend,
|
||||||
AllProjectsName allProjectsName,
|
AllProjectsName allProjectsName,
|
||||||
@@ -179,12 +181,13 @@ public class ChangeQueryBuilder extends QueryBuilder<ChangeData> {
|
|||||||
SubmitStrategyFactory submitStrategyFactory,
|
SubmitStrategyFactory submitStrategyFactory,
|
||||||
ConflictsCache conflictsCache,
|
ConflictsCache conflictsCache,
|
||||||
TrackingFooters trackingFooters) {
|
TrackingFooters trackingFooters) {
|
||||||
this.dbProvider = dbProvider;
|
this.db = dbProvider;
|
||||||
this.rewriter = rewriter;
|
this.rewriter = rewriter;
|
||||||
this.userFactory = userFactory;
|
this.userFactory = userFactory;
|
||||||
this.self = self;
|
this.self = self;
|
||||||
this.capabilityControlFactory = capabilityControlFactory;
|
this.capabilityControlFactory = capabilityControlFactory;
|
||||||
this.changeControlGenericFactory = changeControlGenericFactory;
|
this.changeControlGenericFactory = changeControlGenericFactory;
|
||||||
|
this.changeDataFactory = changeDataFactory;
|
||||||
this.accountResolver = accountResolver;
|
this.accountResolver = accountResolver;
|
||||||
this.groupBackend = groupBackend;
|
this.groupBackend = groupBackend;
|
||||||
this.allProjectsName = allProjectsName;
|
this.allProjectsName = allProjectsName;
|
||||||
@@ -224,17 +227,16 @@ public class ChangeQueryBuilder extends QueryBuilder<ChangeData> {
|
|||||||
|
|
||||||
@Operator
|
@Operator
|
||||||
public Predicate<ChangeData> age(String value) {
|
public Predicate<ChangeData> age(String value) {
|
||||||
return new AgePredicate(args.dbProvider, value);
|
return new AgePredicate(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Operator
|
@Operator
|
||||||
public Predicate<ChangeData> change(String query) {
|
public Predicate<ChangeData> change(String query) {
|
||||||
if (PAT_LEGACY_ID.matcher(query).matches()) {
|
if (PAT_LEGACY_ID.matcher(query).matches()) {
|
||||||
return new LegacyChangeIdPredicate(args.dbProvider, Change.Id
|
return new LegacyChangeIdPredicate(args, Change.Id.parse(query));
|
||||||
.parse(query));
|
|
||||||
|
|
||||||
} else if (PAT_CHANGE_ID.matcher(query).matches()) {
|
} else if (PAT_CHANGE_ID.matcher(query).matches()) {
|
||||||
return new ChangeIdPredicate(args.dbProvider, parseChangeId(query));
|
return new ChangeIdPredicate(args, parseChangeId(query));
|
||||||
}
|
}
|
||||||
|
|
||||||
throw new IllegalArgumentException();
|
throw new IllegalArgumentException();
|
||||||
@@ -243,7 +245,7 @@ public class ChangeQueryBuilder extends QueryBuilder<ChangeData> {
|
|||||||
@Operator
|
@Operator
|
||||||
public Predicate<ChangeData> comment(String value) throws QueryParseException {
|
public Predicate<ChangeData> comment(String value) throws QueryParseException {
|
||||||
ChangeIndex index = args.indexes.getSearchIndex();
|
ChangeIndex index = args.indexes.getSearchIndex();
|
||||||
return new CommentPredicate(args.dbProvider, index, value);
|
return new CommentPredicate(args, index, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Operator
|
@Operator
|
||||||
@@ -252,28 +254,28 @@ public class ChangeQueryBuilder extends QueryBuilder<ChangeData> {
|
|||||||
return status_open();
|
return status_open();
|
||||||
|
|
||||||
} else if ("closed".equals(statusName)) {
|
} else if ("closed".equals(statusName)) {
|
||||||
return ChangeStatusPredicate.closed(args.dbProvider);
|
return ChangeStatusPredicate.closed(args.db);
|
||||||
|
|
||||||
} else if ("reviewed".equalsIgnoreCase(statusName)) {
|
} else if ("reviewed".equalsIgnoreCase(statusName)) {
|
||||||
return new IsReviewedPredicate(args.dbProvider);
|
return new IsReviewedPredicate();
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
return new ChangeStatusPredicate(args.dbProvider, statusName);
|
return new ChangeStatusPredicate(statusName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Predicate<ChangeData> status_open() {
|
public Predicate<ChangeData> status_open() {
|
||||||
return ChangeStatusPredicate.open(args.dbProvider);
|
return ChangeStatusPredicate.open(args.db);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Operator
|
@Operator
|
||||||
public Predicate<ChangeData> has(String value) {
|
public Predicate<ChangeData> has(String value) {
|
||||||
if ("star".equalsIgnoreCase(value)) {
|
if ("star".equalsIgnoreCase(value)) {
|
||||||
return new IsStarredByPredicate(args.dbProvider, currentUser);
|
return new IsStarredByPredicate(args, currentUser);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ("draft".equalsIgnoreCase(value)) {
|
if ("draft".equalsIgnoreCase(value)) {
|
||||||
return new HasDraftByPredicate(args.dbProvider, self());
|
return new HasDraftByPredicate(args, self());
|
||||||
}
|
}
|
||||||
|
|
||||||
throw new IllegalArgumentException();
|
throw new IllegalArgumentException();
|
||||||
@@ -282,7 +284,7 @@ public class ChangeQueryBuilder extends QueryBuilder<ChangeData> {
|
|||||||
@Operator
|
@Operator
|
||||||
public Predicate<ChangeData> is(String value) throws QueryParseException {
|
public Predicate<ChangeData> is(String value) throws QueryParseException {
|
||||||
if ("starred".equalsIgnoreCase(value)) {
|
if ("starred".equalsIgnoreCase(value)) {
|
||||||
return new IsStarredByPredicate(args.dbProvider, currentUser);
|
return new IsStarredByPredicate(args, currentUser);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ("watched".equalsIgnoreCase(value)) {
|
if ("watched".equalsIgnoreCase(value)) {
|
||||||
@@ -294,19 +296,19 @@ public class ChangeQueryBuilder extends QueryBuilder<ChangeData> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ("reviewed".equalsIgnoreCase(value)) {
|
if ("reviewed".equalsIgnoreCase(value)) {
|
||||||
return new IsReviewedPredicate(args.dbProvider);
|
return new IsReviewedPredicate();
|
||||||
}
|
}
|
||||||
|
|
||||||
if ("owner".equalsIgnoreCase(value)) {
|
if ("owner".equalsIgnoreCase(value)) {
|
||||||
return new OwnerPredicate(args.dbProvider, self());
|
return new OwnerPredicate(self());
|
||||||
}
|
}
|
||||||
|
|
||||||
if ("reviewer".equalsIgnoreCase(value)) {
|
if ("reviewer".equalsIgnoreCase(value)) {
|
||||||
return new ReviewerPredicate(args.dbProvider, self());
|
return new ReviewerPredicate(self());
|
||||||
}
|
}
|
||||||
|
|
||||||
if ("mergeable".equalsIgnoreCase(value)) {
|
if ("mergeable".equalsIgnoreCase(value)) {
|
||||||
return new IsMergeablePredicate(args.dbProvider);
|
return new IsMergeablePredicate();
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@@ -320,17 +322,13 @@ public class ChangeQueryBuilder extends QueryBuilder<ChangeData> {
|
|||||||
|
|
||||||
@Operator
|
@Operator
|
||||||
public Predicate<ChangeData> commit(String id) {
|
public Predicate<ChangeData> commit(String id) {
|
||||||
return new CommitPredicate(args.dbProvider, AbbreviatedObjectId
|
return new CommitPredicate(args, AbbreviatedObjectId.fromString(id));
|
||||||
.fromString(id));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Operator
|
@Operator
|
||||||
public Predicate<ChangeData> conflicts(String value) throws OrmException,
|
public Predicate<ChangeData> conflicts(String value) throws OrmException,
|
||||||
QueryParseException {
|
QueryParseException {
|
||||||
return new ConflictsPredicate(args.dbProvider, args.patchListCache,
|
return new ConflictsPredicate(args, value, parseChange(value));
|
||||||
args.submitStrategyFactory, args.changeControlGenericFactory,
|
|
||||||
args.userFactory, args.repoManager, args.projectCache,
|
|
||||||
args.conflictsCache, value, parseChange(value));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Operator
|
@Operator
|
||||||
@@ -341,13 +339,13 @@ public class ChangeQueryBuilder extends QueryBuilder<ChangeData> {
|
|||||||
@Operator
|
@Operator
|
||||||
public Predicate<ChangeData> project(String name) {
|
public Predicate<ChangeData> project(String name) {
|
||||||
if (name.startsWith("^"))
|
if (name.startsWith("^"))
|
||||||
return new RegexProjectPredicate(args.dbProvider, name);
|
return new RegexProjectPredicate(name);
|
||||||
return new ProjectPredicate(args.dbProvider, name);
|
return new ProjectPredicate(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Operator
|
@Operator
|
||||||
public Predicate<ChangeData> parentproject(String name) {
|
public Predicate<ChangeData> parentproject(String name) {
|
||||||
return new ParentProjectPredicate(args.dbProvider, args.projectCache,
|
return new ParentProjectPredicate(args.db, args.projectCache,
|
||||||
args.listChildProjects, args.self, name);
|
args.listChildProjects, args.self, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -367,15 +365,15 @@ public class ChangeQueryBuilder extends QueryBuilder<ChangeData> {
|
|||||||
@Operator
|
@Operator
|
||||||
public Predicate<ChangeData> topic(String name) {
|
public Predicate<ChangeData> topic(String name) {
|
||||||
if (name.startsWith("^"))
|
if (name.startsWith("^"))
|
||||||
return new RegexTopicPredicate(args.dbProvider, name);
|
return new RegexTopicPredicate(name);
|
||||||
return new TopicPredicate(args.dbProvider, name);
|
return new TopicPredicate(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Operator
|
@Operator
|
||||||
public Predicate<ChangeData> ref(String ref) {
|
public Predicate<ChangeData> ref(String ref) {
|
||||||
if (ref.startsWith("^"))
|
if (ref.startsWith("^"))
|
||||||
return new RegexRefPredicate(args.dbProvider, ref);
|
return new RegexRefPredicate(ref);
|
||||||
return new RefPredicate(args.dbProvider, ref);
|
return new RefPredicate(ref);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Operator
|
@Operator
|
||||||
@@ -386,9 +384,9 @@ public class ChangeQueryBuilder extends QueryBuilder<ChangeData> {
|
|||||||
@Operator
|
@Operator
|
||||||
public Predicate<ChangeData> file(String file) throws QueryParseException {
|
public Predicate<ChangeData> file(String file) throws QueryParseException {
|
||||||
if (file.startsWith("^")) {
|
if (file.startsWith("^")) {
|
||||||
return new RegexFilePredicate(args.dbProvider, args.patchListCache, file);
|
return new RegexFilePredicate(file);
|
||||||
} else {
|
} else {
|
||||||
return new EqualsFilePredicate(args.dbProvider, args.patchListCache, file);
|
return new EqualsFilePredicate(file);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -442,27 +440,27 @@ public class ChangeQueryBuilder extends QueryBuilder<ChangeData> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return new LabelPredicate(args.projectCache,
|
return new LabelPredicate(args.projectCache,
|
||||||
args.changeControlGenericFactory, args.userFactory, args.dbProvider,
|
args.changeControlGenericFactory, args.userFactory, args.db,
|
||||||
name, accounts, group);
|
name, accounts, group);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Operator
|
@Operator
|
||||||
public Predicate<ChangeData> message(String text) throws QueryParseException {
|
public Predicate<ChangeData> message(String text) throws QueryParseException {
|
||||||
ChangeIndex index = args.indexes.getSearchIndex();
|
ChangeIndex index = args.indexes.getSearchIndex();
|
||||||
return new MessagePredicate(args.dbProvider, index, text);
|
return new MessagePredicate(args, index, text);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Operator
|
@Operator
|
||||||
public Predicate<ChangeData> starredby(String who)
|
public Predicate<ChangeData> starredby(String who)
|
||||||
throws QueryParseException, OrmException {
|
throws QueryParseException, OrmException {
|
||||||
if ("self".equals(who)) {
|
if ("self".equals(who)) {
|
||||||
return new IsStarredByPredicate(args.dbProvider, currentUser);
|
return new IsStarredByPredicate(args, currentUser);
|
||||||
}
|
}
|
||||||
Set<Account.Id> m = parseAccount(who);
|
Set<Account.Id> m = parseAccount(who);
|
||||||
List<IsStarredByPredicate> p = Lists.newArrayListWithCapacity(m.size());
|
List<IsStarredByPredicate> p = Lists.newArrayListWithCapacity(m.size());
|
||||||
for (Account.Id id : m) {
|
for (Account.Id id : m) {
|
||||||
p.add(new IsStarredByPredicate(args.dbProvider,
|
p.add(new IsStarredByPredicate(args,
|
||||||
args.userFactory.create(args.dbProvider, id)));
|
args.userFactory.create(args.db, id)));
|
||||||
}
|
}
|
||||||
return Predicate.or(p);
|
return Predicate.or(p);
|
||||||
}
|
}
|
||||||
@@ -478,7 +476,7 @@ public class ChangeQueryBuilder extends QueryBuilder<ChangeData> {
|
|||||||
p.add(new IsWatchedByPredicate(args, currentUser, false));
|
p.add(new IsWatchedByPredicate(args, currentUser, false));
|
||||||
} else {
|
} else {
|
||||||
p.add(new IsWatchedByPredicate(args,
|
p.add(new IsWatchedByPredicate(args,
|
||||||
args.userFactory.create(args.dbProvider, id), true));
|
args.userFactory.create(args.db, id), true));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return Predicate.or(p);
|
return Predicate.or(p);
|
||||||
@@ -490,7 +488,7 @@ public class ChangeQueryBuilder extends QueryBuilder<ChangeData> {
|
|||||||
Set<Account.Id> m = parseAccount(who);
|
Set<Account.Id> m = parseAccount(who);
|
||||||
List<HasDraftByPredicate> p = Lists.newArrayListWithCapacity(m.size());
|
List<HasDraftByPredicate> p = Lists.newArrayListWithCapacity(m.size());
|
||||||
for (Account.Id id : m) {
|
for (Account.Id id : m) {
|
||||||
p.add(new HasDraftByPredicate(args.dbProvider, id));
|
p.add(new HasDraftByPredicate(args, id));
|
||||||
}
|
}
|
||||||
return Predicate.or(p);
|
return Predicate.or(p);
|
||||||
}
|
}
|
||||||
@@ -505,7 +503,7 @@ public class ChangeQueryBuilder extends QueryBuilder<ChangeData> {
|
|||||||
if (!m.isEmpty()) {
|
if (!m.isEmpty()) {
|
||||||
List<Predicate<ChangeData>> p = Lists.newArrayListWithCapacity(m.size());
|
List<Predicate<ChangeData>> p = Lists.newArrayListWithCapacity(m.size());
|
||||||
for (Account.Id id : m) {
|
for (Account.Id id : m) {
|
||||||
return visibleto(args.userFactory.create(args.dbProvider, id));
|
return visibleto(args.userFactory.create(args.db, id));
|
||||||
}
|
}
|
||||||
return Predicate.or(p);
|
return Predicate.or(p);
|
||||||
}
|
}
|
||||||
@@ -525,7 +523,7 @@ public class ChangeQueryBuilder extends QueryBuilder<ChangeData> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Predicate<ChangeData> visibleto(CurrentUser user) {
|
public Predicate<ChangeData> visibleto(CurrentUser user) {
|
||||||
return new IsVisibleToPredicate(args.dbProvider, //
|
return new IsVisibleToPredicate(args.db, //
|
||||||
args.changeControlGenericFactory, //
|
args.changeControlGenericFactory, //
|
||||||
user);
|
user);
|
||||||
}
|
}
|
||||||
@@ -546,7 +544,7 @@ public class ChangeQueryBuilder extends QueryBuilder<ChangeData> {
|
|||||||
Set<Account.Id> m = parseAccount(who);
|
Set<Account.Id> m = parseAccount(who);
|
||||||
List<OwnerPredicate> p = Lists.newArrayListWithCapacity(m.size());
|
List<OwnerPredicate> p = Lists.newArrayListWithCapacity(m.size());
|
||||||
for (Account.Id id : m) {
|
for (Account.Id id : m) {
|
||||||
p.add(new OwnerPredicate(args.dbProvider, id));
|
p.add(new OwnerPredicate(id));
|
||||||
}
|
}
|
||||||
return Predicate.or(p);
|
return Predicate.or(p);
|
||||||
}
|
}
|
||||||
@@ -558,7 +556,7 @@ public class ChangeQueryBuilder extends QueryBuilder<ChangeData> {
|
|||||||
if (g == null) {
|
if (g == null) {
|
||||||
throw error("Group " + group + " not found");
|
throw error("Group " + group + " not found");
|
||||||
}
|
}
|
||||||
return new OwnerinPredicate(args.dbProvider, args.userFactory, g.getUUID());
|
return new OwnerinPredicate(args.db, args.userFactory, g.getUUID());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Operator
|
@Operator
|
||||||
@@ -573,7 +571,7 @@ public class ChangeQueryBuilder extends QueryBuilder<ChangeData> {
|
|||||||
Set<Account.Id> m = parseAccount(who);
|
Set<Account.Id> m = parseAccount(who);
|
||||||
List<ReviewerPredicate> p = Lists.newArrayListWithCapacity(m.size());
|
List<ReviewerPredicate> p = Lists.newArrayListWithCapacity(m.size());
|
||||||
for (Account.Id id : m) {
|
for (Account.Id id : m) {
|
||||||
p.add(new ReviewerPredicate(args.dbProvider, id));
|
p.add(new ReviewerPredicate(id));
|
||||||
}
|
}
|
||||||
return Predicate.or(p);
|
return Predicate.or(p);
|
||||||
}
|
}
|
||||||
@@ -585,13 +583,12 @@ public class ChangeQueryBuilder extends QueryBuilder<ChangeData> {
|
|||||||
if (g == null) {
|
if (g == null) {
|
||||||
throw error("Group " + group + " not found");
|
throw error("Group " + group + " not found");
|
||||||
}
|
}
|
||||||
return new ReviewerinPredicate(args.dbProvider, args.userFactory, g.getUUID());
|
return new ReviewerinPredicate(args.db, args.userFactory, g.getUUID());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Operator
|
@Operator
|
||||||
public Predicate<ChangeData> tr(String trackingId) {
|
public Predicate<ChangeData> tr(String trackingId) {
|
||||||
return new TrackingIdPredicate(args.dbProvider, args.trackingFooters,
|
return new TrackingIdPredicate(args.trackingFooters, trackingId);
|
||||||
args.repoManager, trackingId);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Operator
|
@Operator
|
||||||
@@ -627,13 +624,13 @@ public class ChangeQueryBuilder extends QueryBuilder<ChangeData> {
|
|||||||
@Operator
|
@Operator
|
||||||
public Predicate<ChangeData> sortkey_after(String sortKey) {
|
public Predicate<ChangeData> sortkey_after(String sortKey) {
|
||||||
return new SortKeyPredicate.After(
|
return new SortKeyPredicate.After(
|
||||||
BasicChangeRewrites.schema(args.indexes), args.dbProvider, sortKey);
|
BasicChangeRewrites.schema(args.indexes), args.db, sortKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Operator
|
@Operator
|
||||||
public Predicate<ChangeData> sortkey_before(String sortKey) {
|
public Predicate<ChangeData> sortkey_before(String sortKey) {
|
||||||
return new SortKeyPredicate.Before(
|
return new SortKeyPredicate.Before(
|
||||||
BasicChangeRewrites.schema(args.indexes), args.dbProvider, sortKey);
|
BasicChangeRewrites.schema(args.indexes), args.db, sortKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Operator
|
@Operator
|
||||||
@@ -673,7 +670,7 @@ public class ChangeQueryBuilder extends QueryBuilder<ChangeData> {
|
|||||||
new ArrayList<ProjectPredicate>();
|
new ArrayList<ProjectPredicate>();
|
||||||
for (Project.NameKey name : args.projectCache.all()) {
|
for (Project.NameKey name : args.projectCache.all()) {
|
||||||
if (name.get().toLowerCase().contains(query.toLowerCase())) {
|
if (name.get().toLowerCase().contains(query.toLowerCase())) {
|
||||||
predicate.add(new ProjectPredicate(args.dbProvider, name.get()));
|
predicate.add(new ProjectPredicate(name.get()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -714,12 +711,12 @@ public class ChangeQueryBuilder extends QueryBuilder<ChangeData> {
|
|||||||
private List<Change> parseChange(String value) throws OrmException,
|
private List<Change> parseChange(String value) throws OrmException,
|
||||||
QueryParseException {
|
QueryParseException {
|
||||||
if (PAT_LEGACY_ID.matcher(value).matches()) {
|
if (PAT_LEGACY_ID.matcher(value).matches()) {
|
||||||
return Collections.singletonList(args.dbProvider.get().changes()
|
return Collections.singletonList(args.db.get().changes()
|
||||||
.get(Change.Id.parse(value)));
|
.get(Change.Id.parse(value)));
|
||||||
} else if (PAT_CHANGE_ID.matcher(value).matches()) {
|
} else if (PAT_CHANGE_ID.matcher(value).matches()) {
|
||||||
Change.Key a = new Change.Key(parseChangeId(value));
|
Change.Key a = new Change.Key(parseChangeId(value));
|
||||||
List<Change> changes =
|
List<Change> changes =
|
||||||
args.dbProvider.get().changes().byKeyRange(a, a.max()).toList();
|
args.db.get().changes().byKeyRange(a, a.max()).toList();
|
||||||
if (changes.isEmpty()) {
|
if (changes.isEmpty()) {
|
||||||
throw error("Change " + value + " not found");
|
throw error("Change " + value + " not found");
|
||||||
}
|
}
|
||||||
|
@@ -52,7 +52,7 @@ public final class ChangeStatusPredicate extends IndexPredicate<ChangeData> {
|
|||||||
List<Predicate<ChangeData>> r = new ArrayList<Predicate<ChangeData>>(4);
|
List<Predicate<ChangeData>> r = new ArrayList<Predicate<ChangeData>>(4);
|
||||||
for (final Change.Status e : Change.Status.values()) {
|
for (final Change.Status e : Change.Status.values()) {
|
||||||
if (e.isOpen()) {
|
if (e.isOpen()) {
|
||||||
r.add(new ChangeStatusPredicate(dbProvider, e));
|
r.add(new ChangeStatusPredicate(e));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return r.size() == 1 ? r.get(0) : or(r);
|
return r.size() == 1 ? r.get(0) : or(r);
|
||||||
@@ -62,25 +62,22 @@ public final class ChangeStatusPredicate extends IndexPredicate<ChangeData> {
|
|||||||
List<Predicate<ChangeData>> r = new ArrayList<Predicate<ChangeData>>(4);
|
List<Predicate<ChangeData>> r = new ArrayList<Predicate<ChangeData>>(4);
|
||||||
for (final Change.Status e : Change.Status.values()) {
|
for (final Change.Status e : Change.Status.values()) {
|
||||||
if (e.isClosed()) {
|
if (e.isClosed()) {
|
||||||
r.add(new ChangeStatusPredicate(dbProvider, e));
|
r.add(new ChangeStatusPredicate(e));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return r.size() == 1 ? r.get(0) : or(r);
|
return r.size() == 1 ? r.get(0) : or(r);
|
||||||
}
|
}
|
||||||
|
|
||||||
private final Provider<ReviewDb> dbProvider;
|
|
||||||
private final Change.Status status;
|
private final Change.Status status;
|
||||||
|
|
||||||
ChangeStatusPredicate(Provider<ReviewDb> dbProvider, String value) {
|
ChangeStatusPredicate(String value) {
|
||||||
super(ChangeField.STATUS, value);
|
super(ChangeField.STATUS, value);
|
||||||
this.dbProvider = dbProvider;
|
|
||||||
status = VALUES.inverse().get(value);
|
status = VALUES.inverse().get(value);
|
||||||
checkArgument(status != null, "invalid change status: %s", value);
|
checkArgument(status != null, "invalid change status: %s", value);
|
||||||
}
|
}
|
||||||
|
|
||||||
ChangeStatusPredicate(Provider<ReviewDb> dbProvider, Change.Status status) {
|
ChangeStatusPredicate(Change.Status status) {
|
||||||
super(ChangeField.STATUS, VALUES.get(status));
|
super(ChangeField.STATUS, VALUES.get(status));
|
||||||
this.dbProvider = dbProvider;
|
|
||||||
this.status = status;
|
this.status = status;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -90,7 +87,7 @@ public final class ChangeStatusPredicate extends IndexPredicate<ChangeData> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean match(final ChangeData object) throws OrmException {
|
public boolean match(final ChangeData object) throws OrmException {
|
||||||
Change change = object.change(dbProvider);
|
Change change = object.change();
|
||||||
return change != null && status.equals(change.getStatus());
|
return change != null && status.equals(change.getStatus());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -14,22 +14,21 @@
|
|||||||
|
|
||||||
package com.google.gerrit.server.query.change;
|
package com.google.gerrit.server.query.change;
|
||||||
|
|
||||||
import com.google.gerrit.reviewdb.server.ReviewDb;
|
|
||||||
import com.google.gerrit.server.index.ChangeField;
|
import com.google.gerrit.server.index.ChangeField;
|
||||||
import com.google.gerrit.server.index.ChangeIndex;
|
import com.google.gerrit.server.index.ChangeIndex;
|
||||||
import com.google.gerrit.server.index.IndexPredicate;
|
import com.google.gerrit.server.index.IndexPredicate;
|
||||||
import com.google.gerrit.server.query.Predicate;
|
import com.google.gerrit.server.query.Predicate;
|
||||||
import com.google.gerrit.server.query.QueryParseException;
|
import com.google.gerrit.server.query.QueryParseException;
|
||||||
|
import com.google.gerrit.server.query.change.ChangeQueryBuilder.Arguments;
|
||||||
import com.google.gwtorm.server.OrmException;
|
import com.google.gwtorm.server.OrmException;
|
||||||
import com.google.inject.Provider;
|
|
||||||
|
|
||||||
class CommentPredicate extends IndexPredicate<ChangeData> {
|
class CommentPredicate extends IndexPredicate<ChangeData> {
|
||||||
private final Provider<ReviewDb> db;
|
private final Arguments args;
|
||||||
private final ChangeIndex index;
|
private final ChangeIndex index;
|
||||||
|
|
||||||
CommentPredicate(Provider<ReviewDb> db, ChangeIndex index, String value) {
|
CommentPredicate(Arguments args, ChangeIndex index, String value) {
|
||||||
super(ChangeField.COMMENT, value);
|
super(ChangeField.COMMENT, value);
|
||||||
this.db = db;
|
this.args = args;
|
||||||
this.index = index;
|
this.index = index;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -37,7 +36,7 @@ class CommentPredicate extends IndexPredicate<ChangeData> {
|
|||||||
public boolean match(ChangeData object) throws OrmException {
|
public boolean match(ChangeData object) throws OrmException {
|
||||||
try {
|
try {
|
||||||
for (ChangeData cData : index.getSource(
|
for (ChangeData cData : index.getSource(
|
||||||
Predicate.and(new LegacyChangeIdPredicate(db, object.getId()), this), 1)
|
Predicate.and(new LegacyChangeIdPredicate(args, object.getId()), this), 1)
|
||||||
.read()) {
|
.read()) {
|
||||||
if (cData.getId().equals(object.getId())) {
|
if (cData.getId().equals(object.getId())) {
|
||||||
return true;
|
return true;
|
||||||
|
@@ -16,30 +16,29 @@ package com.google.gerrit.server.query.change;
|
|||||||
|
|
||||||
import com.google.gerrit.reviewdb.client.PatchSet;
|
import com.google.gerrit.reviewdb.client.PatchSet;
|
||||||
import com.google.gerrit.reviewdb.client.RevId;
|
import com.google.gerrit.reviewdb.client.RevId;
|
||||||
import com.google.gerrit.reviewdb.server.ReviewDb;
|
|
||||||
import com.google.gerrit.server.index.ChangeField;
|
import com.google.gerrit.server.index.ChangeField;
|
||||||
import com.google.gerrit.server.index.IndexPredicate;
|
import com.google.gerrit.server.index.IndexPredicate;
|
||||||
|
import com.google.gerrit.server.query.change.ChangeQueryBuilder.Arguments;
|
||||||
import com.google.gwtorm.server.OrmException;
|
import com.google.gwtorm.server.OrmException;
|
||||||
import com.google.gwtorm.server.ResultSet;
|
import com.google.gwtorm.server.ResultSet;
|
||||||
import com.google.inject.Provider;
|
|
||||||
|
|
||||||
import org.eclipse.jgit.lib.AbbreviatedObjectId;
|
import org.eclipse.jgit.lib.AbbreviatedObjectId;
|
||||||
import org.eclipse.jgit.lib.ObjectId;
|
import org.eclipse.jgit.lib.ObjectId;
|
||||||
|
|
||||||
class CommitPredicate extends IndexPredicate<ChangeData> implements
|
class CommitPredicate extends IndexPredicate<ChangeData> implements
|
||||||
ChangeDataSource {
|
ChangeDataSource {
|
||||||
private final Provider<ReviewDb> dbProvider;
|
private final Arguments args;
|
||||||
private final AbbreviatedObjectId abbrevId;
|
private final AbbreviatedObjectId abbrevId;
|
||||||
|
|
||||||
CommitPredicate(Provider<ReviewDb> dbProvider, AbbreviatedObjectId id) {
|
CommitPredicate(Arguments args, AbbreviatedObjectId id) {
|
||||||
super(ChangeField.COMMIT, id.name());
|
super(ChangeField.COMMIT, id.name());
|
||||||
this.dbProvider = dbProvider;
|
this.args = args;
|
||||||
this.abbrevId = id;
|
this.abbrevId = id;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean match(final ChangeData object) throws OrmException {
|
public boolean match(final ChangeData object) throws OrmException {
|
||||||
for (PatchSet p : object.patches(dbProvider)) {
|
for (PatchSet p : object.patches()) {
|
||||||
if (p.getRevision() != null && p.getRevision().get() != null) {
|
if (p.getRevision() != null && p.getRevision().get() != null) {
|
||||||
final ObjectId id = ObjectId.fromString(p.getRevision().get());
|
final ObjectId id = ObjectId.fromString(p.getRevision().get());
|
||||||
if (abbrevId.prefixCompare(id) == 0) {
|
if (abbrevId.prefixCompare(id) == 0) {
|
||||||
@@ -54,12 +53,12 @@ class CommitPredicate extends IndexPredicate<ChangeData> implements
|
|||||||
public ResultSet<ChangeData> read() throws OrmException {
|
public ResultSet<ChangeData> read() throws OrmException {
|
||||||
final RevId id = new RevId(abbrevId.name());
|
final RevId id = new RevId(abbrevId.name());
|
||||||
if (id.isComplete()) {
|
if (id.isComplete()) {
|
||||||
return ChangeDataResultSet.patchSet(//
|
return ChangeDataResultSet.patchSet(args.changeDataFactory, args.db,
|
||||||
dbProvider.get().patchSets().byRevision(id));
|
args.db.get().patchSets().byRevision(id));
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
return ChangeDataResultSet.patchSet(//
|
return ChangeDataResultSet.patchSet(args.changeDataFactory, args.db,
|
||||||
dbProvider.get().patchSets().byRevisionRange(id, id.max()));
|
args.db.get().patchSets().byRevisionRange(id, id.max()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -20,14 +20,9 @@ import com.google.gerrit.common.data.SubmitTypeRecord;
|
|||||||
import com.google.gerrit.reviewdb.client.Change;
|
import com.google.gerrit.reviewdb.client.Change;
|
||||||
import com.google.gerrit.reviewdb.client.Project.SubmitType;
|
import com.google.gerrit.reviewdb.client.Project.SubmitType;
|
||||||
import com.google.gerrit.reviewdb.server.ReviewDb;
|
import com.google.gerrit.reviewdb.server.ReviewDb;
|
||||||
import com.google.gerrit.server.IdentifiedUser;
|
|
||||||
import com.google.gerrit.server.git.CodeReviewCommit;
|
import com.google.gerrit.server.git.CodeReviewCommit;
|
||||||
import com.google.gerrit.server.git.GitRepositoryManager;
|
|
||||||
import com.google.gerrit.server.git.MergeException;
|
import com.google.gerrit.server.git.MergeException;
|
||||||
import com.google.gerrit.server.git.SubmitStrategy;
|
import com.google.gerrit.server.git.SubmitStrategy;
|
||||||
import com.google.gerrit.server.git.SubmitStrategyFactory;
|
|
||||||
import com.google.gerrit.server.patch.PatchListCache;
|
|
||||||
import com.google.gerrit.server.project.ChangeControl;
|
|
||||||
import com.google.gerrit.server.project.NoSuchChangeException;
|
import com.google.gerrit.server.project.NoSuchChangeException;
|
||||||
import com.google.gerrit.server.project.NoSuchProjectException;
|
import com.google.gerrit.server.project.NoSuchProjectException;
|
||||||
import com.google.gerrit.server.project.ProjectCache;
|
import com.google.gerrit.server.project.ProjectCache;
|
||||||
@@ -35,6 +30,7 @@ import com.google.gerrit.server.project.ProjectState;
|
|||||||
import com.google.gerrit.server.query.OperatorPredicate;
|
import com.google.gerrit.server.query.OperatorPredicate;
|
||||||
import com.google.gerrit.server.query.OrPredicate;
|
import com.google.gerrit.server.query.OrPredicate;
|
||||||
import com.google.gerrit.server.query.Predicate;
|
import com.google.gerrit.server.query.Predicate;
|
||||||
|
import com.google.gerrit.server.query.change.ChangeQueryBuilder.Arguments;
|
||||||
import com.google.gwtorm.server.OrmException;
|
import com.google.gwtorm.server.OrmException;
|
||||||
import com.google.inject.Provider;
|
import com.google.inject.Provider;
|
||||||
|
|
||||||
@@ -55,53 +51,43 @@ import java.util.Set;
|
|||||||
class ConflictsPredicate extends OrPredicate<ChangeData> {
|
class ConflictsPredicate extends OrPredicate<ChangeData> {
|
||||||
private final String value;
|
private final String value;
|
||||||
|
|
||||||
ConflictsPredicate(Provider<ReviewDb> db, PatchListCache plc,
|
ConflictsPredicate(Arguments args, String value, List<Change> changes)
|
||||||
SubmitStrategyFactory submitStrategyFactory,
|
|
||||||
ChangeControl.GenericFactory changeControlFactory,
|
|
||||||
IdentifiedUser.GenericFactory identifiedUserFactory,
|
|
||||||
GitRepositoryManager repoManager, ProjectCache projectCache,
|
|
||||||
ConflictsCache conflictsCache, String value, List<Change> changes)
|
|
||||||
throws OrmException {
|
throws OrmException {
|
||||||
super(predicates(db, plc, submitStrategyFactory, changeControlFactory,
|
super(predicates(args, value, changes));
|
||||||
identifiedUserFactory, repoManager, projectCache, conflictsCache,
|
|
||||||
value, changes));
|
|
||||||
this.value = value;
|
this.value = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static List<Predicate<ChangeData>> predicates(
|
private static List<Predicate<ChangeData>> predicates(final Arguments args,
|
||||||
final Provider<ReviewDb> db, final PatchListCache plc,
|
String value, List<Change> changes) throws OrmException {
|
||||||
final SubmitStrategyFactory submitStrategyFactory,
|
|
||||||
final ChangeControl.GenericFactory changeControlFactory,
|
|
||||||
final IdentifiedUser.GenericFactory identifiedUserFactory,
|
|
||||||
final GitRepositoryManager repoManager, final ProjectCache projectCache,
|
|
||||||
final ConflictsCache conflictsCache, final String value,
|
|
||||||
List<Change> changes) throws OrmException {
|
|
||||||
List<Predicate<ChangeData>> changePredicates =
|
List<Predicate<ChangeData>> changePredicates =
|
||||||
Lists.newArrayListWithCapacity(changes.size());
|
Lists.newArrayListWithCapacity(changes.size());
|
||||||
|
final Provider<ReviewDb> db = args.db;
|
||||||
for (final Change c : changes) {
|
for (final Change c : changes) {
|
||||||
final ChangeDataCache changeDataCache = new ChangeDataCache(c, db, projectCache);
|
final ChangeDataCache changeDataCache = new ChangeDataCache(
|
||||||
List<String> files = new ChangeData(c).currentFilePaths(db, plc);
|
c, db, args.changeDataFactory, args.projectCache);
|
||||||
|
List<String> files = args.changeDataFactory.create(db.get(), c)
|
||||||
|
.currentFilePaths();
|
||||||
List<Predicate<ChangeData>> filePredicates =
|
List<Predicate<ChangeData>> filePredicates =
|
||||||
Lists.newArrayListWithCapacity(files.size());
|
Lists.newArrayListWithCapacity(files.size());
|
||||||
for (String file : files) {
|
for (String file : files) {
|
||||||
filePredicates.add(new EqualsFilePredicate(db, plc, file));
|
filePredicates.add(new EqualsFilePredicate(file));
|
||||||
}
|
}
|
||||||
|
|
||||||
List<Predicate<ChangeData>> predicatesForOneChange =
|
List<Predicate<ChangeData>> predicatesForOneChange =
|
||||||
Lists.newArrayListWithCapacity(5);
|
Lists.newArrayListWithCapacity(5);
|
||||||
predicatesForOneChange.add(
|
predicatesForOneChange.add(
|
||||||
not(new LegacyChangeIdPredicate(db, c.getId())));
|
not(new LegacyChangeIdPredicate(args, c.getId())));
|
||||||
predicatesForOneChange.add(
|
predicatesForOneChange.add(
|
||||||
new ProjectPredicate(db, c.getProject().get()));
|
new ProjectPredicate(c.getProject().get()));
|
||||||
predicatesForOneChange.add(
|
predicatesForOneChange.add(
|
||||||
new RefPredicate(db, c.getDest().get()));
|
new RefPredicate(c.getDest().get()));
|
||||||
predicatesForOneChange.add(or(filePredicates));
|
predicatesForOneChange.add(or(filePredicates));
|
||||||
predicatesForOneChange.add(new OperatorPredicate<ChangeData>(
|
predicatesForOneChange.add(new OperatorPredicate<ChangeData>(
|
||||||
ChangeQueryBuilder.FIELD_CONFLICTS, value) {
|
ChangeQueryBuilder.FIELD_CONFLICTS, value) {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean match(ChangeData object) throws OrmException {
|
public boolean match(ChangeData object) throws OrmException {
|
||||||
Change otherChange = object.change(db);
|
Change otherChange = object.change();
|
||||||
if (otherChange == null) {
|
if (otherChange == null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -113,17 +99,17 @@ class ConflictsPredicate extends OrPredicate<ChangeData> {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
ObjectId other = ObjectId.fromString(
|
ObjectId other = ObjectId.fromString(
|
||||||
object.currentPatchSet(db).getRevision().get());
|
object.currentPatchSet().getRevision().get());
|
||||||
ConflictKey conflictsKey =
|
ConflictKey conflictsKey =
|
||||||
new ConflictKey(changeDataCache.getTestAgainst(), other, submitType,
|
new ConflictKey(changeDataCache.getTestAgainst(), other, submitType,
|
||||||
changeDataCache.getProjectState().isUseContentMerge());
|
changeDataCache.getProjectState().isUseContentMerge());
|
||||||
Boolean conflicts = conflictsCache.getIfPresent(conflictsKey);
|
Boolean conflicts = args.conflictsCache.getIfPresent(conflictsKey);
|
||||||
if (conflicts != null) {
|
if (conflicts != null) {
|
||||||
return conflicts;
|
return conflicts;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
Repository repo =
|
Repository repo =
|
||||||
repoManager.openRepository(otherChange.getProject());
|
args.repoManager.openRepository(otherChange.getProject());
|
||||||
try {
|
try {
|
||||||
RevWalk rw = new RevWalk(repo) {
|
RevWalk rw = new RevWalk(repo) {
|
||||||
@Override
|
@Override
|
||||||
@@ -136,7 +122,7 @@ class ConflictsPredicate extends OrPredicate<ChangeData> {
|
|||||||
CodeReviewCommit commit =
|
CodeReviewCommit commit =
|
||||||
(CodeReviewCommit) rw.parseCommit(changeDataCache.getTestAgainst());
|
(CodeReviewCommit) rw.parseCommit(changeDataCache.getTestAgainst());
|
||||||
SubmitStrategy strategy =
|
SubmitStrategy strategy =
|
||||||
submitStrategyFactory.create(submitType,
|
args.submitStrategyFactory.create(submitType,
|
||||||
db.get(), repo, rw, null, canMergeFlag,
|
db.get(), repo, rw, null, canMergeFlag,
|
||||||
getAlreadyAccepted(repo, rw, commit),
|
getAlreadyAccepted(repo, rw, commit),
|
||||||
otherChange.getDest());
|
otherChange.getDest());
|
||||||
@@ -144,7 +130,7 @@ class ConflictsPredicate extends OrPredicate<ChangeData> {
|
|||||||
(CodeReviewCommit) rw.parseCommit(other);
|
(CodeReviewCommit) rw.parseCommit(other);
|
||||||
otherCommit.add(canMergeFlag);
|
otherCommit.add(canMergeFlag);
|
||||||
conflicts = !strategy.dryRun(commit, otherCommit);
|
conflicts = !strategy.dryRun(commit, otherCommit);
|
||||||
conflictsCache.put(conflictsKey, conflicts);
|
args.conflictsCache.put(conflictsKey, conflicts);
|
||||||
return conflicts;
|
return conflicts;
|
||||||
} catch (MergeException e) {
|
} catch (MergeException e) {
|
||||||
throw new IllegalStateException(e);
|
throw new IllegalStateException(e);
|
||||||
@@ -169,9 +155,9 @@ class ConflictsPredicate extends OrPredicate<ChangeData> {
|
|||||||
private SubmitType getSubmitType(Change change, ChangeData cd) throws OrmException {
|
private SubmitType getSubmitType(Change change, ChangeData cd) throws OrmException {
|
||||||
try {
|
try {
|
||||||
final SubmitTypeRecord r =
|
final SubmitTypeRecord r =
|
||||||
changeControlFactory.controlFor(change,
|
args.changeControlGenericFactory.controlFor(change,
|
||||||
identifiedUserFactory.create(change.getOwner()))
|
args.userFactory.create(change.getOwner()))
|
||||||
.getSubmitTypeRecord(db.get(), cd.currentPatchSet(db), cd);
|
.getSubmitTypeRecord(db.get(), cd.currentPatchSet(), cd);
|
||||||
if (r.status != SubmitTypeRecord.Status.OK) {
|
if (r.status != SubmitTypeRecord.Status.OK) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -218,15 +204,18 @@ class ConflictsPredicate extends OrPredicate<ChangeData> {
|
|||||||
private static class ChangeDataCache {
|
private static class ChangeDataCache {
|
||||||
private final Change change;
|
private final Change change;
|
||||||
private final Provider<ReviewDb> db;
|
private final Provider<ReviewDb> db;
|
||||||
|
private final ChangeData.Factory changeDataFactory;
|
||||||
private final ProjectCache projectCache;
|
private final ProjectCache projectCache;
|
||||||
|
|
||||||
private ObjectId testAgainst;
|
private ObjectId testAgainst;
|
||||||
private ProjectState projectState;
|
private ProjectState projectState;
|
||||||
private Set<ObjectId> alreadyAccepted;
|
private Set<ObjectId> alreadyAccepted;
|
||||||
|
|
||||||
ChangeDataCache(Change change, Provider<ReviewDb> db, ProjectCache projectCache) {
|
ChangeDataCache(Change change, Provider<ReviewDb> db,
|
||||||
|
ChangeData.Factory changeDataFactory, ProjectCache projectCache) {
|
||||||
this.change = change;
|
this.change = change;
|
||||||
this.db = db;
|
this.db = db;
|
||||||
|
this.changeDataFactory = changeDataFactory;
|
||||||
this.projectCache = projectCache;
|
this.projectCache = projectCache;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -234,7 +223,8 @@ class ConflictsPredicate extends OrPredicate<ChangeData> {
|
|||||||
throws OrmException {
|
throws OrmException {
|
||||||
if (testAgainst == null) {
|
if (testAgainst == null) {
|
||||||
testAgainst = ObjectId.fromString(
|
testAgainst = ObjectId.fromString(
|
||||||
new ChangeData(change).currentPatchSet(db).getRevision().get());
|
changeDataFactory.create(db.get(), change)
|
||||||
|
.currentPatchSet().getRevision().get());
|
||||||
}
|
}
|
||||||
return testAgainst;
|
return testAgainst;
|
||||||
}
|
}
|
||||||
|
@@ -14,31 +14,24 @@
|
|||||||
|
|
||||||
package com.google.gerrit.server.query.change;
|
package com.google.gerrit.server.query.change;
|
||||||
|
|
||||||
import com.google.gerrit.reviewdb.server.ReviewDb;
|
|
||||||
import com.google.gerrit.server.index.ChangeField;
|
import com.google.gerrit.server.index.ChangeField;
|
||||||
import com.google.gerrit.server.index.IndexPredicate;
|
import com.google.gerrit.server.index.IndexPredicate;
|
||||||
import com.google.gerrit.server.patch.PatchListCache;
|
|
||||||
import com.google.gwtorm.server.OrmException;
|
import com.google.gwtorm.server.OrmException;
|
||||||
import com.google.inject.Provider;
|
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
class EqualsFilePredicate extends IndexPredicate<ChangeData> {
|
class EqualsFilePredicate extends IndexPredicate<ChangeData> {
|
||||||
private final Provider<ReviewDb> db;
|
|
||||||
private final PatchListCache cache;
|
|
||||||
private final String value;
|
private final String value;
|
||||||
|
|
||||||
EqualsFilePredicate(Provider<ReviewDb> db, PatchListCache plc, String value) {
|
EqualsFilePredicate(String value) {
|
||||||
super(ChangeField.FILE, value);
|
super(ChangeField.FILE, value);
|
||||||
this.db = db;
|
|
||||||
this.cache = plc;
|
|
||||||
this.value = value;
|
this.value = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean match(ChangeData object) throws OrmException {
|
public boolean match(ChangeData object) throws OrmException {
|
||||||
List<String> files = object.currentFilePaths(db, cache);
|
List<String> files = object.currentFilePaths();
|
||||||
if (files != null) {
|
if (files != null) {
|
||||||
return Collections.binarySearch(files, value) >= 0;
|
return Collections.binarySearch(files, value) >= 0;
|
||||||
} else {
|
} else {
|
||||||
|
@@ -57,7 +57,7 @@ class EqualsLabelPredicate extends IndexPredicate<ChangeData> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean match(ChangeData object) throws OrmException {
|
public boolean match(ChangeData object) throws OrmException {
|
||||||
Change c = object.change(dbProvider);
|
Change c = object.change();
|
||||||
if (c == null) {
|
if (c == null) {
|
||||||
// The change has disappeared.
|
// The change has disappeared.
|
||||||
//
|
//
|
||||||
@@ -71,7 +71,7 @@ class EqualsLabelPredicate extends IndexPredicate<ChangeData> {
|
|||||||
}
|
}
|
||||||
LabelType labelType = type(project.getLabelTypes(), label);
|
LabelType labelType = type(project.getLabelTypes(), label);
|
||||||
boolean hasVote = false;
|
boolean hasVote = false;
|
||||||
for (PatchSetApproval p : object.currentApprovals(dbProvider)) {
|
for (PatchSetApproval p : object.currentApprovals()) {
|
||||||
if (labelType.matches(p)) {
|
if (labelType.matches(p)) {
|
||||||
hasVote = true;
|
hasVote = true;
|
||||||
if (match(c, p.getValue(), p.getAccountId(), labelType)) {
|
if (match(c, p.getValue(), p.getAccountId(), labelType)) {
|
||||||
|
@@ -17,30 +17,29 @@ package com.google.gerrit.server.query.change;
|
|||||||
import com.google.gerrit.reviewdb.client.Account;
|
import com.google.gerrit.reviewdb.client.Account;
|
||||||
import com.google.gerrit.reviewdb.client.Change;
|
import com.google.gerrit.reviewdb.client.Change;
|
||||||
import com.google.gerrit.reviewdb.client.PatchLineComment;
|
import com.google.gerrit.reviewdb.client.PatchLineComment;
|
||||||
import com.google.gerrit.reviewdb.server.ReviewDb;
|
|
||||||
import com.google.gerrit.server.query.OperatorPredicate;
|
import com.google.gerrit.server.query.OperatorPredicate;
|
||||||
|
import com.google.gerrit.server.query.change.ChangeQueryBuilder.Arguments;
|
||||||
import com.google.gwtorm.server.ListResultSet;
|
import com.google.gwtorm.server.ListResultSet;
|
||||||
import com.google.gwtorm.server.OrmException;
|
import com.google.gwtorm.server.OrmException;
|
||||||
import com.google.gwtorm.server.ResultSet;
|
import com.google.gwtorm.server.ResultSet;
|
||||||
import com.google.inject.Provider;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
|
|
||||||
class HasDraftByPredicate extends OperatorPredicate<ChangeData> implements
|
class HasDraftByPredicate extends OperatorPredicate<ChangeData> implements
|
||||||
ChangeDataSource {
|
ChangeDataSource {
|
||||||
private final Provider<ReviewDb> db;
|
private final Arguments args;
|
||||||
private final Account.Id accountId;
|
private final Account.Id accountId;
|
||||||
|
|
||||||
HasDraftByPredicate(Provider<ReviewDb> db, Account.Id accountId) {
|
HasDraftByPredicate(Arguments args, Account.Id accountId) {
|
||||||
super(ChangeQueryBuilder.FIELD_DRAFTBY, accountId.toString());
|
super(ChangeQueryBuilder.FIELD_DRAFTBY, accountId.toString());
|
||||||
this.db = db;
|
this.args = args;
|
||||||
this.accountId = accountId;
|
this.accountId = accountId;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean match(final ChangeData object) throws OrmException {
|
public boolean match(final ChangeData object) throws OrmException {
|
||||||
for (PatchLineComment c : object.comments(db)) {
|
for (PatchLineComment c : object.comments()) {
|
||||||
if (c.getStatus() == PatchLineComment.Status.DRAFT
|
if (c.getStatus() == PatchLineComment.Status.DRAFT
|
||||||
&& c.getAuthor().equals(accountId)) {
|
&& c.getAuthor().equals(accountId)) {
|
||||||
return true;
|
return true;
|
||||||
@@ -52,14 +51,14 @@ class HasDraftByPredicate extends OperatorPredicate<ChangeData> implements
|
|||||||
@Override
|
@Override
|
||||||
public ResultSet<ChangeData> read() throws OrmException {
|
public ResultSet<ChangeData> read() throws OrmException {
|
||||||
HashSet<Change.Id> ids = new HashSet<Change.Id>();
|
HashSet<Change.Id> ids = new HashSet<Change.Id>();
|
||||||
for (PatchLineComment sc : db.get().patchComments()
|
for (PatchLineComment sc : args.db.get().patchComments()
|
||||||
.draftByAuthor(accountId)) {
|
.draftByAuthor(accountId)) {
|
||||||
ids.add(sc.getKey().getParentKey().getParentKey().getParentKey());
|
ids.add(sc.getKey().getParentKey().getParentKey().getParentKey());
|
||||||
}
|
}
|
||||||
|
|
||||||
ArrayList<ChangeData> r = new ArrayList<ChangeData>(ids.size());
|
ArrayList<ChangeData> r = new ArrayList<ChangeData>(ids.size());
|
||||||
for (Change.Id id : ids) {
|
for (Change.Id id : ids) {
|
||||||
r.add(new ChangeData(id));
|
r.add(args.changeDataFactory.create(args.db.get(), id));
|
||||||
}
|
}
|
||||||
return new ListResultSet<ChangeData>(r);
|
return new ListResultSet<ChangeData>(r);
|
||||||
}
|
}
|
||||||
|
@@ -15,23 +15,18 @@
|
|||||||
package com.google.gerrit.server.query.change;
|
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.server.index.ChangeField;
|
import com.google.gerrit.server.index.ChangeField;
|
||||||
import com.google.gerrit.server.index.IndexPredicate;
|
import com.google.gerrit.server.index.IndexPredicate;
|
||||||
import com.google.gwtorm.server.OrmException;
|
import com.google.gwtorm.server.OrmException;
|
||||||
import com.google.inject.Provider;
|
|
||||||
|
|
||||||
class IsMergeablePredicate extends IndexPredicate<ChangeData> {
|
class IsMergeablePredicate extends IndexPredicate<ChangeData> {
|
||||||
private final Provider<ReviewDb> dbProvider;
|
IsMergeablePredicate() {
|
||||||
|
|
||||||
IsMergeablePredicate(Provider<ReviewDb> dbProvider) {
|
|
||||||
super(ChangeField.MERGEABLE, "1");
|
super(ChangeField.MERGEABLE, "1");
|
||||||
this.dbProvider = dbProvider;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean match(ChangeData object) throws OrmException {
|
public boolean match(ChangeData object) throws OrmException {
|
||||||
Change c = object.change(dbProvider);
|
Change c = object.change();
|
||||||
return c != null && c.isMergeable();
|
return c != null && c.isMergeable();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -17,29 +17,24 @@ 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.client.PatchSet;
|
import com.google.gerrit.reviewdb.client.PatchSet;
|
||||||
import com.google.gerrit.reviewdb.client.PatchSetApproval;
|
import com.google.gerrit.reviewdb.client.PatchSetApproval;
|
||||||
import com.google.gerrit.reviewdb.server.ReviewDb;
|
|
||||||
import com.google.gerrit.server.index.ChangeField;
|
import com.google.gerrit.server.index.ChangeField;
|
||||||
import com.google.gerrit.server.index.IndexPredicate;
|
import com.google.gerrit.server.index.IndexPredicate;
|
||||||
import com.google.gwtorm.server.OrmException;
|
import com.google.gwtorm.server.OrmException;
|
||||||
import com.google.inject.Provider;
|
|
||||||
|
|
||||||
class IsReviewedPredicate extends IndexPredicate<ChangeData> {
|
class IsReviewedPredicate extends IndexPredicate<ChangeData> {
|
||||||
private final Provider<ReviewDb> dbProvider;
|
IsReviewedPredicate() {
|
||||||
|
|
||||||
IsReviewedPredicate(Provider<ReviewDb> dbProvider) {
|
|
||||||
super(ChangeField.REVIEWED, "1");
|
super(ChangeField.REVIEWED, "1");
|
||||||
this.dbProvider = dbProvider;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean match(final ChangeData object) throws OrmException {
|
public boolean match(final ChangeData object) throws OrmException {
|
||||||
Change c = object.change(dbProvider);
|
Change c = object.change();
|
||||||
if (c == null) {
|
if (c == null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
PatchSet.Id current = c.currentPatchSetId();
|
PatchSet.Id current = c.currentPatchSetId();
|
||||||
for (PatchSetApproval p : object.approvals(dbProvider)) {
|
for (PatchSetApproval p : object.approvals()) {
|
||||||
if (p.getPatchSetId().equals(current) && p.getValue() != 0) {
|
if (p.getPatchSetId().equals(current) && p.getValue() != 0) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@@ -16,14 +16,13 @@ package com.google.gerrit.server.query.change;
|
|||||||
|
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
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.server.CurrentUser;
|
import com.google.gerrit.server.CurrentUser;
|
||||||
import com.google.gerrit.server.IdentifiedUser;
|
import com.google.gerrit.server.IdentifiedUser;
|
||||||
import com.google.gerrit.server.query.OrPredicate;
|
import com.google.gerrit.server.query.OrPredicate;
|
||||||
import com.google.gerrit.server.query.Predicate;
|
import com.google.gerrit.server.query.Predicate;
|
||||||
|
import com.google.gerrit.server.query.change.ChangeQueryBuilder.Arguments;
|
||||||
import com.google.gwtorm.server.OrmException;
|
import com.google.gwtorm.server.OrmException;
|
||||||
import com.google.gwtorm.server.ResultSet;
|
import com.google.gwtorm.server.ResultSet;
|
||||||
import com.google.inject.Provider;
|
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
@@ -38,21 +37,21 @@ class IsStarredByPredicate extends OrPredicate<ChangeData> implements
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static List<Predicate<ChangeData>> predicates(
|
private static List<Predicate<ChangeData>> predicates(
|
||||||
Provider<ReviewDb> db,
|
Arguments args,
|
||||||
Set<Change.Id> ids) {
|
Set<Change.Id> ids) {
|
||||||
List<Predicate<ChangeData>> r = Lists.newArrayListWithCapacity(ids.size());
|
List<Predicate<ChangeData>> r = Lists.newArrayListWithCapacity(ids.size());
|
||||||
for (Change.Id id : ids) {
|
for (Change.Id id : ids) {
|
||||||
r.add(new LegacyChangeIdPredicate(db, id));
|
r.add(new LegacyChangeIdPredicate(args, id));
|
||||||
}
|
}
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
private final Provider<ReviewDb> db;
|
private final Arguments args;
|
||||||
private final CurrentUser user;
|
private final CurrentUser user;
|
||||||
|
|
||||||
IsStarredByPredicate(Provider<ReviewDb> db, CurrentUser user) {
|
IsStarredByPredicate(Arguments args, CurrentUser user) {
|
||||||
super(predicates(db, user.getStarredChanges()));
|
super(predicates(args, user.getStarredChanges()));
|
||||||
this.db = db;
|
this.args = args;
|
||||||
this.user = user;
|
this.user = user;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -63,8 +62,8 @@ class IsStarredByPredicate extends OrPredicate<ChangeData> implements
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ResultSet<ChangeData> read() throws OrmException {
|
public ResultSet<ChangeData> read() throws OrmException {
|
||||||
return ChangeDataResultSet.change( //
|
return ChangeDataResultSet.change(args.changeDataFactory, args.db,
|
||||||
db.get().changes().get(user.getStarredChanges()));
|
args.db.get().changes().get(user.getStarredChanges()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -54,7 +54,7 @@ class IsVisibleToPredicate extends OperatorPredicate<ChangeData> {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
Change c = cd.change(db);
|
Change c = cd.change();
|
||||||
if (c == null) {
|
if (c == null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@@ -15,24 +15,23 @@
|
|||||||
package com.google.gerrit.server.query.change;
|
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.server.index.ChangeField;
|
import com.google.gerrit.server.index.ChangeField;
|
||||||
import com.google.gerrit.server.index.IndexPredicate;
|
import com.google.gerrit.server.index.IndexPredicate;
|
||||||
|
import com.google.gerrit.server.query.change.ChangeQueryBuilder.Arguments;
|
||||||
import com.google.gwtorm.server.ListResultSet;
|
import com.google.gwtorm.server.ListResultSet;
|
||||||
import com.google.gwtorm.server.OrmException;
|
import com.google.gwtorm.server.OrmException;
|
||||||
import com.google.gwtorm.server.ResultSet;
|
import com.google.gwtorm.server.ResultSet;
|
||||||
import com.google.inject.Provider;
|
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
|
||||||
class LegacyChangeIdPredicate extends IndexPredicate<ChangeData> implements
|
class LegacyChangeIdPredicate extends IndexPredicate<ChangeData> implements
|
||||||
ChangeDataSource {
|
ChangeDataSource {
|
||||||
private final Provider<ReviewDb> db;
|
private final Arguments args;
|
||||||
private final Change.Id id;
|
private final Change.Id id;
|
||||||
|
|
||||||
LegacyChangeIdPredicate(Provider<ReviewDb> db, Change.Id id) {
|
LegacyChangeIdPredicate(Arguments args, Change.Id id) {
|
||||||
super(ChangeField.LEGACY_ID, ChangeQueryBuilder.FIELD_CHANGE, id.toString());
|
super(ChangeField.LEGACY_ID, ChangeQueryBuilder.FIELD_CHANGE, id.toString());
|
||||||
this.db = db;
|
this.args = args;
|
||||||
this.id = id;
|
this.id = id;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -43,10 +42,10 @@ class LegacyChangeIdPredicate extends IndexPredicate<ChangeData> implements
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ResultSet<ChangeData> read() throws OrmException {
|
public ResultSet<ChangeData> read() throws OrmException {
|
||||||
Change c = db.get().changes().get(id);
|
Change c = args.db.get().changes().get(id);
|
||||||
if (c != null) {
|
if (c != null) {
|
||||||
return new ListResultSet<ChangeData>( //
|
return new ListResultSet<ChangeData>(Collections.singletonList(
|
||||||
Collections.singletonList(new ChangeData(c)));
|
args.changeDataFactory.create(args.db.get(), c)));
|
||||||
} else {
|
} else {
|
||||||
return new ListResultSet<ChangeData>(Collections.<ChangeData> emptyList());
|
return new ListResultSet<ChangeData>(Collections.<ChangeData> emptyList());
|
||||||
}
|
}
|
||||||
|
@@ -14,26 +14,25 @@
|
|||||||
|
|
||||||
package com.google.gerrit.server.query.change;
|
package com.google.gerrit.server.query.change;
|
||||||
|
|
||||||
import com.google.gerrit.reviewdb.server.ReviewDb;
|
|
||||||
import com.google.gerrit.server.index.ChangeField;
|
import com.google.gerrit.server.index.ChangeField;
|
||||||
import com.google.gerrit.server.index.ChangeIndex;
|
import com.google.gerrit.server.index.ChangeIndex;
|
||||||
import com.google.gerrit.server.index.IndexPredicate;
|
import com.google.gerrit.server.index.IndexPredicate;
|
||||||
import com.google.gerrit.server.query.Predicate;
|
import com.google.gerrit.server.query.Predicate;
|
||||||
import com.google.gerrit.server.query.QueryParseException;
|
import com.google.gerrit.server.query.QueryParseException;
|
||||||
|
import com.google.gerrit.server.query.change.ChangeQueryBuilder.Arguments;
|
||||||
import com.google.gwtorm.server.OrmException;
|
import com.google.gwtorm.server.OrmException;
|
||||||
import com.google.inject.Provider;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Predicate to match changes that contains specified text in commit messages
|
* Predicate to match changes that contains specified text in commit messages
|
||||||
* body.
|
* body.
|
||||||
*/
|
*/
|
||||||
class MessagePredicate extends IndexPredicate<ChangeData> {
|
class MessagePredicate extends IndexPredicate<ChangeData> {
|
||||||
private final Provider<ReviewDb> db;
|
private final Arguments args;
|
||||||
private final ChangeIndex index;
|
private final ChangeIndex index;
|
||||||
|
|
||||||
MessagePredicate(Provider<ReviewDb> db, ChangeIndex index, String value) {
|
MessagePredicate(Arguments args, ChangeIndex index, String value) {
|
||||||
super(ChangeField.COMMIT_MESSAGE, value);
|
super(ChangeField.COMMIT_MESSAGE, value);
|
||||||
this.db = db;
|
this.args = args;
|
||||||
this.index = index;
|
this.index = index;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -41,7 +40,7 @@ class MessagePredicate extends IndexPredicate<ChangeData> {
|
|||||||
public boolean match(ChangeData object) throws OrmException {
|
public boolean match(ChangeData object) throws OrmException {
|
||||||
try {
|
try {
|
||||||
for (ChangeData cData : index.getSource(
|
for (ChangeData cData : index.getSource(
|
||||||
Predicate.and(new LegacyChangeIdPredicate(db, object.getId()), this), 1)
|
Predicate.and(new LegacyChangeIdPredicate(args, object.getId()), this), 1)
|
||||||
.read()) {
|
.read()) {
|
||||||
if (cData.getId().equals(object.getId())) {
|
if (cData.getId().equals(object.getId())) {
|
||||||
return true;
|
return true;
|
||||||
|
@@ -16,19 +16,15 @@ package com.google.gerrit.server.query.change;
|
|||||||
|
|
||||||
import com.google.gerrit.reviewdb.client.Account;
|
import com.google.gerrit.reviewdb.client.Account;
|
||||||
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.server.index.ChangeField;
|
import com.google.gerrit.server.index.ChangeField;
|
||||||
import com.google.gerrit.server.index.IndexPredicate;
|
import com.google.gerrit.server.index.IndexPredicate;
|
||||||
import com.google.gwtorm.server.OrmException;
|
import com.google.gwtorm.server.OrmException;
|
||||||
import com.google.inject.Provider;
|
|
||||||
|
|
||||||
class OwnerPredicate extends IndexPredicate<ChangeData> {
|
class OwnerPredicate extends IndexPredicate<ChangeData> {
|
||||||
private final Provider<ReviewDb> dbProvider;
|
|
||||||
private final Account.Id id;
|
private final Account.Id id;
|
||||||
|
|
||||||
OwnerPredicate(Provider<ReviewDb> dbProvider, Account.Id id) {
|
OwnerPredicate(Account.Id id) {
|
||||||
super(ChangeField.OWNER, id.toString());
|
super(ChangeField.OWNER, id.toString());
|
||||||
this.dbProvider = dbProvider;
|
|
||||||
this.id = id;
|
this.id = id;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -38,7 +34,7 @@ class OwnerPredicate extends IndexPredicate<ChangeData> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean match(final ChangeData object) throws OrmException {
|
public boolean match(final ChangeData object) throws OrmException {
|
||||||
Change change = object.change(dbProvider);
|
Change change = object.change();
|
||||||
return change != null && id.equals(change.getOwner());
|
return change != null && id.equals(change.getOwner());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -41,7 +41,7 @@ class OwnerinPredicate extends OperatorPredicate<ChangeData> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean match(final ChangeData object) throws OrmException {
|
public boolean match(final ChangeData object) throws OrmException {
|
||||||
final Change change = object.change(dbProvider);
|
final Change change = object.change();
|
||||||
if (change == null) {
|
if (change == null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@@ -50,12 +50,12 @@ class ParentProjectPredicate extends OrPredicate<ChangeData> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
List<Predicate<ChangeData>> r = Lists.newArrayList();
|
List<Predicate<ChangeData>> r = Lists.newArrayList();
|
||||||
r.add(new ProjectPredicate(dbProvider, projectState.getProject().getName()));
|
r.add(new ProjectPredicate(projectState.getProject().getName()));
|
||||||
ListChildProjects children = listChildProjects.get();
|
ListChildProjects children = listChildProjects.get();
|
||||||
children.setRecursive(true);
|
children.setRecursive(true);
|
||||||
for (ProjectInfo p : children.apply(new ProjectResource(
|
for (ProjectInfo p : children.apply(new ProjectResource(
|
||||||
projectState.controlFor(self.get())))) {
|
projectState.controlFor(self.get())))) {
|
||||||
r.add(new ProjectPredicate(dbProvider, p.name));
|
r.add(new ProjectPredicate(p.name));
|
||||||
}
|
}
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
@@ -16,18 +16,13 @@ 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.client.Project;
|
import com.google.gerrit.reviewdb.client.Project;
|
||||||
import com.google.gerrit.reviewdb.server.ReviewDb;
|
|
||||||
import com.google.gerrit.server.index.ChangeField;
|
import com.google.gerrit.server.index.ChangeField;
|
||||||
import com.google.gerrit.server.index.IndexPredicate;
|
import com.google.gerrit.server.index.IndexPredicate;
|
||||||
import com.google.gwtorm.server.OrmException;
|
import com.google.gwtorm.server.OrmException;
|
||||||
import com.google.inject.Provider;
|
|
||||||
|
|
||||||
class ProjectPredicate extends IndexPredicate<ChangeData> {
|
class ProjectPredicate extends IndexPredicate<ChangeData> {
|
||||||
private final Provider<ReviewDb> dbProvider;
|
ProjectPredicate(String id) {
|
||||||
|
|
||||||
ProjectPredicate(Provider<ReviewDb> dbProvider, String id) {
|
|
||||||
super(ChangeField.PROJECT, id);
|
super(ChangeField.PROJECT, id);
|
||||||
this.dbProvider = dbProvider;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Project.NameKey getValueKey() {
|
Project.NameKey getValueKey() {
|
||||||
@@ -36,7 +31,7 @@ class ProjectPredicate extends IndexPredicate<ChangeData> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean match(final ChangeData object) throws OrmException {
|
public boolean match(final ChangeData object) throws OrmException {
|
||||||
Change change = object.change(dbProvider);
|
Change change = object.change();
|
||||||
if (change == null) {
|
if (change == null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@@ -27,7 +27,6 @@ import com.google.gerrit.server.data.ChangeAttribute;
|
|||||||
import com.google.gerrit.server.data.PatchSetAttribute;
|
import com.google.gerrit.server.data.PatchSetAttribute;
|
||||||
import com.google.gerrit.server.data.QueryStatsAttribute;
|
import com.google.gerrit.server.data.QueryStatsAttribute;
|
||||||
import com.google.gerrit.server.events.EventFactory;
|
import com.google.gerrit.server.events.EventFactory;
|
||||||
import com.google.gerrit.server.git.GitRepositoryManager;
|
|
||||||
import com.google.gerrit.server.project.ChangeControl;
|
import com.google.gerrit.server.project.ChangeControl;
|
||||||
import com.google.gerrit.server.project.NoSuchChangeException;
|
import com.google.gerrit.server.project.NoSuchChangeException;
|
||||||
import com.google.gerrit.server.query.Predicate;
|
import com.google.gerrit.server.query.Predicate;
|
||||||
@@ -67,7 +66,7 @@ public class QueryProcessor {
|
|||||||
@Override
|
@Override
|
||||||
public int compare(ChangeData a, ChangeData b) {
|
public int compare(ChangeData a, ChangeData b) {
|
||||||
try {
|
try {
|
||||||
return a.change(db).getSortKey().compareTo(b.change(db).getSortKey());
|
return a.change().getSortKey().compareTo(b.change().getSortKey());
|
||||||
} catch (OrmException e) {
|
} catch (OrmException e) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -79,7 +78,7 @@ public class QueryProcessor {
|
|||||||
@Override
|
@Override
|
||||||
public int compare(ChangeData a, ChangeData b) {
|
public int compare(ChangeData a, ChangeData b) {
|
||||||
try {
|
try {
|
||||||
return b.change(db).getSortKey().compareTo(a.change(db).getSortKey());
|
return b.change().getSortKey().compareTo(a.change().getSortKey());
|
||||||
} catch (OrmException e) {
|
} catch (OrmException e) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -98,7 +97,6 @@ public class QueryProcessor {
|
|||||||
private final ChangeQueryBuilder queryBuilder;
|
private final ChangeQueryBuilder queryBuilder;
|
||||||
private final ChangeQueryRewriter queryRewriter;
|
private final ChangeQueryRewriter queryRewriter;
|
||||||
private final Provider<ReviewDb> db;
|
private final Provider<ReviewDb> db;
|
||||||
private final GitRepositoryManager repoManager;
|
|
||||||
private final ChangeControl.GenericFactory changeControlFactory;
|
private final ChangeControl.GenericFactory changeControlFactory;
|
||||||
private final TrackingFooters trackingFooters;
|
private final TrackingFooters trackingFooters;
|
||||||
private final CurrentUser user;
|
private final CurrentUser user;
|
||||||
@@ -126,14 +124,12 @@ public class QueryProcessor {
|
|||||||
QueryProcessor(EventFactory eventFactory,
|
QueryProcessor(EventFactory eventFactory,
|
||||||
ChangeQueryBuilder.Factory queryBuilder, CurrentUser currentUser,
|
ChangeQueryBuilder.Factory queryBuilder, CurrentUser currentUser,
|
||||||
ChangeQueryRewriter queryRewriter, Provider<ReviewDb> db,
|
ChangeQueryRewriter queryRewriter, Provider<ReviewDb> db,
|
||||||
GitRepositoryManager repoManager,
|
|
||||||
TrackingFooters trackingFooters,
|
TrackingFooters trackingFooters,
|
||||||
ChangeControl.GenericFactory changeControlFactory) {
|
ChangeControl.GenericFactory changeControlFactory) {
|
||||||
this.eventFactory = eventFactory;
|
this.eventFactory = eventFactory;
|
||||||
this.queryBuilder = queryBuilder.create(currentUser);
|
this.queryBuilder = queryBuilder.create(currentUser);
|
||||||
this.queryRewriter = queryRewriter;
|
this.queryRewriter = queryRewriter;
|
||||||
this.db = db;
|
this.db = db;
|
||||||
this.repoManager = repoManager;
|
|
||||||
this.trackingFooters = trackingFooters;
|
this.trackingFooters = trackingFooters;
|
||||||
this.changeControlFactory = changeControlFactory;
|
this.changeControlFactory = changeControlFactory;
|
||||||
this.user = currentUser;
|
this.user = currentUser;
|
||||||
@@ -308,7 +304,7 @@ public class QueryProcessor {
|
|||||||
for (ChangeData d : results) {
|
for (ChangeData d : results) {
|
||||||
ChangeControl cc = d.changeControl();
|
ChangeControl cc = d.changeControl();
|
||||||
if (cc == null || cc.getCurrentUser() != user) {
|
if (cc == null || cc.getCurrentUser() != user) {
|
||||||
cc = changeControlFactory.controlFor(d.change(db), user);
|
cc = changeControlFactory.controlFor(d.change(), user);
|
||||||
}
|
}
|
||||||
|
|
||||||
LabelTypes labelTypes = cc.getLabelTypes();
|
LabelTypes labelTypes = cc.getLabelTypes();
|
||||||
@@ -317,7 +313,7 @@ public class QueryProcessor {
|
|||||||
|
|
||||||
if (!trackingFooters.isEmpty()) {
|
if (!trackingFooters.isEmpty()) {
|
||||||
eventFactory.addTrackingIds(c,
|
eventFactory.addTrackingIds(c,
|
||||||
trackingFooters.extract(d.commitFooters(repoManager, db)));
|
trackingFooters.extract(d.commitFooters()));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (includeAllReviewers) {
|
if (includeAllReviewers) {
|
||||||
@@ -333,40 +329,40 @@ public class QueryProcessor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (includeCommitMessage) {
|
if (includeCommitMessage) {
|
||||||
eventFactory.addCommitMessage(c, d.commitMessage(repoManager, db));
|
eventFactory.addCommitMessage(c, d.commitMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (includePatchSets) {
|
if (includePatchSets) {
|
||||||
if (includeFiles) {
|
if (includeFiles) {
|
||||||
eventFactory.addPatchSets(c, d.patches(db),
|
eventFactory.addPatchSets(c, d.patches(),
|
||||||
includeApprovals ? d.approvalsMap(db).asMap() : null,
|
includeApprovals ? d.approvalsMap().asMap() : null,
|
||||||
includeFiles, d.change(db), labelTypes);
|
includeFiles, d.change(), labelTypes);
|
||||||
} else {
|
} else {
|
||||||
eventFactory.addPatchSets(c, d.patches(db),
|
eventFactory.addPatchSets(c, d.patches(),
|
||||||
includeApprovals ? d.approvalsMap(db).asMap() : null,
|
includeApprovals ? d.approvalsMap().asMap() : null,
|
||||||
labelTypes);
|
labelTypes);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (includeCurrentPatchSet) {
|
if (includeCurrentPatchSet) {
|
||||||
PatchSet current = d.currentPatchSet(db);
|
PatchSet current = d.currentPatchSet();
|
||||||
if (current != null) {
|
if (current != null) {
|
||||||
c.currentPatchSet = eventFactory.asPatchSetAttribute(current);
|
c.currentPatchSet = eventFactory.asPatchSetAttribute(current);
|
||||||
eventFactory.addApprovals(c.currentPatchSet,
|
eventFactory.addApprovals(c.currentPatchSet,
|
||||||
d.currentApprovals(db), labelTypes);
|
d.currentApprovals(), labelTypes);
|
||||||
|
|
||||||
if (includeFiles) {
|
if (includeFiles) {
|
||||||
eventFactory.addPatchSetFileNames(c.currentPatchSet,
|
eventFactory.addPatchSetFileNames(c.currentPatchSet,
|
||||||
d.change(db), d.currentPatchSet(db));
|
d.change(), d.currentPatchSet());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (includeComments) {
|
if (includeComments) {
|
||||||
eventFactory.addComments(c, d.messages(db));
|
eventFactory.addComments(c, d.messages());
|
||||||
if (includePatchSets) {
|
if (includePatchSets) {
|
||||||
for (PatchSetAttribute attribute : c.patchSets) {
|
for (PatchSetAttribute attribute : c.patchSets) {
|
||||||
eventFactory.addPatchSetComments(attribute, d.comments(db));
|
eventFactory.addPatchSetComments(attribute, d.comments());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -15,23 +15,18 @@
|
|||||||
package com.google.gerrit.server.query.change;
|
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.server.index.ChangeField;
|
import com.google.gerrit.server.index.ChangeField;
|
||||||
import com.google.gerrit.server.index.IndexPredicate;
|
import com.google.gerrit.server.index.IndexPredicate;
|
||||||
import com.google.gwtorm.server.OrmException;
|
import com.google.gwtorm.server.OrmException;
|
||||||
import com.google.inject.Provider;
|
|
||||||
|
|
||||||
class RefPredicate extends IndexPredicate<ChangeData> {
|
class RefPredicate extends IndexPredicate<ChangeData> {
|
||||||
private final Provider<ReviewDb> dbProvider;
|
RefPredicate(String ref) {
|
||||||
|
|
||||||
RefPredicate(Provider<ReviewDb> dbProvider, String ref) {
|
|
||||||
super(ChangeField.REF, ref);
|
super(ChangeField.REF, ref);
|
||||||
this.dbProvider = dbProvider;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean match(final ChangeData object) throws OrmException {
|
public boolean match(final ChangeData object) throws OrmException {
|
||||||
Change change = object.change(dbProvider);
|
Change change = object.change();
|
||||||
if (change == null) {
|
if (change == null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@@ -14,12 +14,9 @@
|
|||||||
|
|
||||||
package com.google.gerrit.server.query.change;
|
package com.google.gerrit.server.query.change;
|
||||||
|
|
||||||
import com.google.gerrit.reviewdb.server.ReviewDb;
|
|
||||||
import com.google.gerrit.server.index.ChangeField;
|
import com.google.gerrit.server.index.ChangeField;
|
||||||
import com.google.gerrit.server.index.RegexPredicate;
|
import com.google.gerrit.server.index.RegexPredicate;
|
||||||
import com.google.gerrit.server.patch.PatchListCache;
|
|
||||||
import com.google.gwtorm.server.OrmException;
|
import com.google.gwtorm.server.OrmException;
|
||||||
import com.google.inject.Provider;
|
|
||||||
|
|
||||||
import dk.brics.automaton.Automaton;
|
import dk.brics.automaton.Automaton;
|
||||||
import dk.brics.automaton.RegExp;
|
import dk.brics.automaton.RegExp;
|
||||||
@@ -29,8 +26,6 @@ import java.util.Collections;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
class RegexFilePredicate extends RegexPredicate<ChangeData> {
|
class RegexFilePredicate extends RegexPredicate<ChangeData> {
|
||||||
private final Provider<ReviewDb> db;
|
|
||||||
private final PatchListCache cache;
|
|
||||||
private final RunAutomaton pattern;
|
private final RunAutomaton pattern;
|
||||||
|
|
||||||
private final String prefixBegin;
|
private final String prefixBegin;
|
||||||
@@ -38,10 +33,8 @@ class RegexFilePredicate extends RegexPredicate<ChangeData> {
|
|||||||
private final int prefixLen;
|
private final int prefixLen;
|
||||||
private final boolean prefixOnly;
|
private final boolean prefixOnly;
|
||||||
|
|
||||||
RegexFilePredicate(Provider<ReviewDb> db, PatchListCache plc, String re) {
|
RegexFilePredicate(String re) {
|
||||||
super(ChangeField.FILE, re);
|
super(ChangeField.FILE, re);
|
||||||
this.db = db;
|
|
||||||
this.cache = plc;
|
|
||||||
|
|
||||||
if (re.startsWith("^")) {
|
if (re.startsWith("^")) {
|
||||||
re = re.substring(1);
|
re = re.substring(1);
|
||||||
@@ -69,7 +62,7 @@ class RegexFilePredicate extends RegexPredicate<ChangeData> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean match(ChangeData object) throws OrmException {
|
public boolean match(ChangeData object) throws OrmException {
|
||||||
List<String> files = object.currentFilePaths(db, cache);
|
List<String> files = object.currentFilePaths();
|
||||||
if (files != null) {
|
if (files != null) {
|
||||||
int begin, end;
|
int begin, end;
|
||||||
|
|
||||||
|
@@ -16,20 +16,17 @@ 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.client.Project;
|
import com.google.gerrit.reviewdb.client.Project;
|
||||||
import com.google.gerrit.reviewdb.server.ReviewDb;
|
|
||||||
import com.google.gerrit.server.index.ChangeField;
|
import com.google.gerrit.server.index.ChangeField;
|
||||||
import com.google.gerrit.server.index.RegexPredicate;
|
import com.google.gerrit.server.index.RegexPredicate;
|
||||||
import com.google.gwtorm.server.OrmException;
|
import com.google.gwtorm.server.OrmException;
|
||||||
import com.google.inject.Provider;
|
|
||||||
|
|
||||||
import dk.brics.automaton.RegExp;
|
import dk.brics.automaton.RegExp;
|
||||||
import dk.brics.automaton.RunAutomaton;
|
import dk.brics.automaton.RunAutomaton;
|
||||||
|
|
||||||
class RegexProjectPredicate extends RegexPredicate<ChangeData> {
|
class RegexProjectPredicate extends RegexPredicate<ChangeData> {
|
||||||
private final Provider<ReviewDb> dbProvider;
|
|
||||||
private final RunAutomaton pattern;
|
private final RunAutomaton pattern;
|
||||||
|
|
||||||
RegexProjectPredicate(Provider<ReviewDb> dbProvider, String re) {
|
RegexProjectPredicate(String re) {
|
||||||
super(ChangeField.PROJECT, re);
|
super(ChangeField.PROJECT, re);
|
||||||
|
|
||||||
if (re.startsWith("^")) {
|
if (re.startsWith("^")) {
|
||||||
@@ -40,13 +37,12 @@ class RegexProjectPredicate extends RegexPredicate<ChangeData> {
|
|||||||
re = re.substring(0, re.length() - 1);
|
re = re.substring(0, re.length() - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.dbProvider = dbProvider;
|
|
||||||
this.pattern = new RunAutomaton(new RegExp(re).toAutomaton());
|
this.pattern = new RunAutomaton(new RegExp(re).toAutomaton());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean match(final ChangeData object) throws OrmException {
|
public boolean match(final ChangeData object) throws OrmException {
|
||||||
Change change = object.change(dbProvider);
|
Change change = object.change();
|
||||||
if (change == null) {
|
if (change == null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@@ -15,20 +15,17 @@
|
|||||||
package com.google.gerrit.server.query.change;
|
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.server.index.ChangeField;
|
import com.google.gerrit.server.index.ChangeField;
|
||||||
import com.google.gerrit.server.index.RegexPredicate;
|
import com.google.gerrit.server.index.RegexPredicate;
|
||||||
import com.google.gwtorm.server.OrmException;
|
import com.google.gwtorm.server.OrmException;
|
||||||
import com.google.inject.Provider;
|
|
||||||
|
|
||||||
import dk.brics.automaton.RegExp;
|
import dk.brics.automaton.RegExp;
|
||||||
import dk.brics.automaton.RunAutomaton;
|
import dk.brics.automaton.RunAutomaton;
|
||||||
|
|
||||||
class RegexRefPredicate extends RegexPredicate<ChangeData> {
|
class RegexRefPredicate extends RegexPredicate<ChangeData> {
|
||||||
private final Provider<ReviewDb> dbProvider;
|
|
||||||
private final RunAutomaton pattern;
|
private final RunAutomaton pattern;
|
||||||
|
|
||||||
RegexRefPredicate(Provider<ReviewDb> dbProvider, String re) {
|
RegexRefPredicate(String re) {
|
||||||
super(ChangeField.REF, re);
|
super(ChangeField.REF, re);
|
||||||
|
|
||||||
if (re.startsWith("^")) {
|
if (re.startsWith("^")) {
|
||||||
@@ -39,13 +36,12 @@ class RegexRefPredicate extends RegexPredicate<ChangeData> {
|
|||||||
re = re.substring(0, re.length() - 1);
|
re = re.substring(0, re.length() - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.dbProvider = dbProvider;
|
|
||||||
this.pattern = new RunAutomaton(new RegExp(re).toAutomaton());
|
this.pattern = new RunAutomaton(new RegExp(re).toAutomaton());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean match(final ChangeData object) throws OrmException {
|
public boolean match(final ChangeData object) throws OrmException {
|
||||||
Change change = object.change(dbProvider);
|
Change change = object.change();
|
||||||
if (change == null) {
|
if (change == null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@@ -15,20 +15,17 @@
|
|||||||
package com.google.gerrit.server.query.change;
|
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.server.index.ChangeField;
|
import com.google.gerrit.server.index.ChangeField;
|
||||||
import com.google.gerrit.server.index.RegexPredicate;
|
import com.google.gerrit.server.index.RegexPredicate;
|
||||||
import com.google.gwtorm.server.OrmException;
|
import com.google.gwtorm.server.OrmException;
|
||||||
import com.google.inject.Provider;
|
|
||||||
|
|
||||||
import dk.brics.automaton.RegExp;
|
import dk.brics.automaton.RegExp;
|
||||||
import dk.brics.automaton.RunAutomaton;
|
import dk.brics.automaton.RunAutomaton;
|
||||||
|
|
||||||
class RegexTopicPredicate extends RegexPredicate<ChangeData> {
|
class RegexTopicPredicate extends RegexPredicate<ChangeData> {
|
||||||
private final Provider<ReviewDb> dbProvider;
|
|
||||||
private final RunAutomaton pattern;
|
private final RunAutomaton pattern;
|
||||||
|
|
||||||
RegexTopicPredicate(Provider<ReviewDb> dbProvider, String re) {
|
RegexTopicPredicate(String re) {
|
||||||
super(ChangeField.TOPIC, re);
|
super(ChangeField.TOPIC, re);
|
||||||
|
|
||||||
if (re.startsWith("^")) {
|
if (re.startsWith("^")) {
|
||||||
@@ -39,13 +36,12 @@ class RegexTopicPredicate extends RegexPredicate<ChangeData> {
|
|||||||
re = re.substring(0, re.length() - 1);
|
re = re.substring(0, re.length() - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.dbProvider = dbProvider;
|
|
||||||
this.pattern = new RunAutomaton(new RegExp(re).toAutomaton());
|
this.pattern = new RunAutomaton(new RegExp(re).toAutomaton());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean match(final ChangeData object) throws OrmException {
|
public boolean match(final ChangeData object) throws OrmException {
|
||||||
Change change = object.change(dbProvider);
|
Change change = object.change();
|
||||||
if (change == null || change.getTopic() == null) {
|
if (change == null || change.getTopic() == null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@@ -75,7 +75,7 @@ public abstract class RevWalkPredicate extends OperatorPredicate<ChangeData> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean match(ChangeData object) throws OrmException {
|
public boolean match(ChangeData object) throws OrmException {
|
||||||
final PatchSet patchSet = object.currentPatchSet(db);
|
final PatchSet patchSet = object.currentPatchSet();
|
||||||
if (patchSet == null) {
|
if (patchSet == null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -90,7 +90,7 @@ public abstract class RevWalkPredicate extends OperatorPredicate<ChangeData> {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
Change change = object.change(db);
|
Change change = object.change();
|
||||||
if (change == null) {
|
if (change == null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@@ -16,19 +16,15 @@ package com.google.gerrit.server.query.change;
|
|||||||
|
|
||||||
import com.google.gerrit.reviewdb.client.Account;
|
import com.google.gerrit.reviewdb.client.Account;
|
||||||
import com.google.gerrit.reviewdb.client.PatchSetApproval;
|
import com.google.gerrit.reviewdb.client.PatchSetApproval;
|
||||||
import com.google.gerrit.reviewdb.server.ReviewDb;
|
|
||||||
import com.google.gerrit.server.index.ChangeField;
|
import com.google.gerrit.server.index.ChangeField;
|
||||||
import com.google.gerrit.server.index.IndexPredicate;
|
import com.google.gerrit.server.index.IndexPredicate;
|
||||||
import com.google.gwtorm.server.OrmException;
|
import com.google.gwtorm.server.OrmException;
|
||||||
import com.google.inject.Provider;
|
|
||||||
|
|
||||||
class ReviewerPredicate extends IndexPredicate<ChangeData> {
|
class ReviewerPredicate extends IndexPredicate<ChangeData> {
|
||||||
private final Provider<ReviewDb> dbProvider;
|
|
||||||
private final Account.Id id;
|
private final Account.Id id;
|
||||||
|
|
||||||
ReviewerPredicate(Provider<ReviewDb> dbProvider, Account.Id id) {
|
ReviewerPredicate(Account.Id id) {
|
||||||
super(ChangeField.REVIEWER, id.toString());
|
super(ChangeField.REVIEWER, id.toString());
|
||||||
this.dbProvider = dbProvider;
|
|
||||||
this.id = id;
|
this.id = id;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -38,7 +34,7 @@ class ReviewerPredicate extends IndexPredicate<ChangeData> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean match(final ChangeData object) throws OrmException {
|
public boolean match(final ChangeData object) throws OrmException {
|
||||||
for (PatchSetApproval p : object.approvals(dbProvider)) {
|
for (PatchSetApproval p : object.approvals()) {
|
||||||
if (id.equals(p.getAccountId())) {
|
if (id.equals(p.getAccountId())) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@@ -41,7 +41,7 @@ class ReviewerinPredicate extends OperatorPredicate<ChangeData> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean match(final ChangeData object) throws OrmException {
|
public boolean match(final ChangeData object) throws OrmException {
|
||||||
for (PatchSetApproval p : object.approvals(dbProvider)) {
|
for (PatchSetApproval p : object.approvals()) {
|
||||||
final IdentifiedUser reviewer = userFactory.create(dbProvider,
|
final IdentifiedUser reviewer = userFactory.create(dbProvider,
|
||||||
p.getAccountId());
|
p.getAccountId());
|
||||||
if (reviewer.getEffectiveGroups().contains(uuid)) {
|
if (reviewer.getEffectiveGroups().contains(uuid)) {
|
||||||
|
@@ -90,7 +90,7 @@ public abstract class SortKeyPredicate extends IndexPredicate<ChangeData> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean match(ChangeData cd) throws OrmException {
|
public boolean match(ChangeData cd) throws OrmException {
|
||||||
Change change = cd.change(dbProvider);
|
Change change = cd.change();
|
||||||
return change != null && change.getSortKey().compareTo(getValue()) < 0;
|
return change != null && change.getSortKey().compareTo(getValue()) < 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -118,7 +118,7 @@ public abstract class SortKeyPredicate extends IndexPredicate<ChangeData> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean match(ChangeData cd) throws OrmException {
|
public boolean match(ChangeData cd) throws OrmException {
|
||||||
Change change = cd.change(dbProvider);
|
Change change = cd.change();
|
||||||
return change != null && change.getSortKey().compareTo(getValue()) > 0;
|
return change != null && change.getSortKey().compareTo(getValue()) > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -15,23 +15,18 @@
|
|||||||
package com.google.gerrit.server.query.change;
|
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.server.index.ChangeField;
|
import com.google.gerrit.server.index.ChangeField;
|
||||||
import com.google.gerrit.server.index.IndexPredicate;
|
import com.google.gerrit.server.index.IndexPredicate;
|
||||||
import com.google.gwtorm.server.OrmException;
|
import com.google.gwtorm.server.OrmException;
|
||||||
import com.google.inject.Provider;
|
|
||||||
|
|
||||||
class TopicPredicate extends IndexPredicate<ChangeData> {
|
class TopicPredicate extends IndexPredicate<ChangeData> {
|
||||||
private final Provider<ReviewDb> dbProvider;
|
TopicPredicate(String topic) {
|
||||||
|
|
||||||
TopicPredicate(Provider<ReviewDb> dbProvider, String topic) {
|
|
||||||
super(ChangeField.TOPIC, topic);
|
super(ChangeField.TOPIC, topic);
|
||||||
this.dbProvider = dbProvider;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean match(final ChangeData object) throws OrmException {
|
public boolean match(final ChangeData object) throws OrmException {
|
||||||
Change change = object.change(dbProvider);
|
Change change = object.change();
|
||||||
if (change == null) {
|
if (change == null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@@ -15,13 +15,10 @@
|
|||||||
package com.google.gerrit.server.query.change;
|
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.server.config.TrackingFooters;
|
import com.google.gerrit.server.config.TrackingFooters;
|
||||||
import com.google.gerrit.server.git.GitRepositoryManager;
|
|
||||||
import com.google.gerrit.server.index.ChangeField;
|
import com.google.gerrit.server.index.ChangeField;
|
||||||
import com.google.gerrit.server.index.IndexPredicate;
|
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 org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
@@ -31,26 +28,19 @@ import java.io.IOException;
|
|||||||
class TrackingIdPredicate extends IndexPredicate<ChangeData> {
|
class TrackingIdPredicate extends IndexPredicate<ChangeData> {
|
||||||
private static final Logger log = LoggerFactory.getLogger(TrackingIdPredicate.class);
|
private static final Logger log = LoggerFactory.getLogger(TrackingIdPredicate.class);
|
||||||
|
|
||||||
private final Provider<ReviewDb> db;
|
|
||||||
private final TrackingFooters trackingFooters;
|
private final TrackingFooters trackingFooters;
|
||||||
private final GitRepositoryManager repositoryManager;
|
|
||||||
|
|
||||||
TrackingIdPredicate(Provider<ReviewDb> db,
|
TrackingIdPredicate(TrackingFooters trackingFooters, String trackingId) {
|
||||||
TrackingFooters trackingFooters,
|
|
||||||
GitRepositoryManager repositoryManager,
|
|
||||||
String trackingId) {
|
|
||||||
super(ChangeField.TR, trackingId);
|
super(ChangeField.TR, trackingId);
|
||||||
this.db = db;
|
|
||||||
this.trackingFooters = trackingFooters;
|
this.trackingFooters = trackingFooters;
|
||||||
this.repositoryManager = repositoryManager;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean match(ChangeData object) throws OrmException {
|
public boolean match(ChangeData object) throws OrmException {
|
||||||
Change c = object.change(db);
|
Change c = object.change();
|
||||||
if (c != null) {
|
if (c != null) {
|
||||||
try {
|
try {
|
||||||
return trackingFooters.extract(object.commitFooters(repositoryManager, db))
|
return trackingFooters.extract(object.commitFooters())
|
||||||
.values().contains(getValue());
|
.values().contains(getValue());
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
log.warn("Cannot extract footers from " + c.getChangeId(), e);
|
log.warn("Cannot extract footers from " + c.getChangeId(), e);
|
||||||
|
@@ -10,7 +10,6 @@ import com.google.gerrit.reviewdb.server.ReviewDb;
|
|||||||
import com.google.gerrit.rules.StoredValues;
|
import com.google.gerrit.rules.StoredValues;
|
||||||
import com.google.gerrit.server.query.change.ChangeData;
|
import com.google.gerrit.server.query.change.ChangeData;
|
||||||
import com.google.gwtorm.server.OrmException;
|
import com.google.gwtorm.server.OrmException;
|
||||||
import com.google.inject.util.Providers;
|
|
||||||
|
|
||||||
import com.googlecode.prolog_cafe.lang.IntegerTerm;
|
import com.googlecode.prolog_cafe.lang.IntegerTerm;
|
||||||
import com.googlecode.prolog_cafe.lang.JavaException;
|
import com.googlecode.prolog_cafe.lang.JavaException;
|
||||||
@@ -49,7 +48,7 @@ class PRED__load_commit_labels_1 extends Predicate.P1 {
|
|||||||
|
|
||||||
Iterable<PatchSetApproval> approvals;
|
Iterable<PatchSetApproval> approvals;
|
||||||
if (cd != null) {
|
if (cd != null) {
|
||||||
approvals = cd.currentApprovals(Providers.of(db));
|
approvals = cd.currentApprovals();
|
||||||
} else {
|
} else {
|
||||||
approvals = db.patchSetApprovals().byPatchSet(patchSet.getId());
|
approvals = db.patchSetApprovals().byPatchSet(patchSet.getId());
|
||||||
}
|
}
|
||||||
|
@@ -26,7 +26,8 @@ public class FakeQueryBuilder extends ChangeQueryBuilder {
|
|||||||
new FakeQueryBuilder.Definition<ChangeData, FakeQueryBuilder>(
|
new FakeQueryBuilder.Definition<ChangeData, FakeQueryBuilder>(
|
||||||
FakeQueryBuilder.class),
|
FakeQueryBuilder.class),
|
||||||
new ChangeQueryBuilder.Arguments(null, null, null, null, null, null,
|
new ChangeQueryBuilder.Arguments(null, null, null, null, null, null,
|
||||||
null, null, null, null, null, null, null, indexes, null, null, null),
|
null, null, null, null, null, null, null, null, indexes, null, null,
|
||||||
|
null),
|
||||||
null);
|
null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -216,7 +216,7 @@ public class IndexRewriteTest {
|
|||||||
|
|
||||||
private IndexedChangeQuery query(Predicate<ChangeData> p, int limit)
|
private IndexedChangeQuery query(Predicate<ChangeData> p, int limit)
|
||||||
throws QueryParseException {
|
throws QueryParseException {
|
||||||
return new IndexedChangeQuery(null, index, p, limit);
|
return new IndexedChangeQuery(index, p, limit);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Set<Change.Status> status(String query) throws QueryParseException {
|
private Set<Change.Status> status(String query) throws QueryParseException {
|
||||||
|
@@ -78,12 +78,12 @@ public class RegexFilePredicateTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static RegexFilePredicate predicate(String pattern) {
|
private static RegexFilePredicate predicate(String pattern) {
|
||||||
return new RegexFilePredicate(null, null, pattern);
|
return new RegexFilePredicate(pattern);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static ChangeData change(String... files) {
|
private static ChangeData change(String... files) {
|
||||||
Arrays.sort(files);
|
Arrays.sort(files);
|
||||||
ChangeData cd = new ChangeData(new Change.Id(1));
|
ChangeData cd = new ChangeData(null, null, null, new Change.Id(1));
|
||||||
cd.setCurrentFilePaths(Arrays.asList(files));
|
cd.setCurrentFilePaths(Arrays.asList(files));
|
||||||
return cd;
|
return cd;
|
||||||
}
|
}
|
||||||
|
@@ -25,6 +25,7 @@ import com.google.common.collect.Sets;
|
|||||||
import com.google.gerrit.extensions.events.LifecycleListener;
|
import com.google.gerrit.extensions.events.LifecycleListener;
|
||||||
import com.google.gerrit.lucene.QueryBuilder;
|
import com.google.gerrit.lucene.QueryBuilder;
|
||||||
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.server.config.GerritServerConfig;
|
import com.google.gerrit.server.config.GerritServerConfig;
|
||||||
import com.google.gerrit.server.config.SitePaths;
|
import com.google.gerrit.server.config.SitePaths;
|
||||||
import com.google.gerrit.server.index.ChangeField;
|
import com.google.gerrit.server.index.ChangeField;
|
||||||
@@ -42,6 +43,7 @@ import com.google.gerrit.server.query.change.ChangeDataSource;
|
|||||||
import com.google.gerrit.server.query.change.ChangeQueryBuilder;
|
import com.google.gerrit.server.query.change.ChangeQueryBuilder;
|
||||||
import com.google.gwtorm.server.OrmException;
|
import com.google.gwtorm.server.OrmException;
|
||||||
import com.google.gwtorm.server.ResultSet;
|
import com.google.gwtorm.server.ResultSet;
|
||||||
|
import com.google.inject.Provider;
|
||||||
|
|
||||||
import org.apache.lucene.search.Query;
|
import org.apache.lucene.search.Query;
|
||||||
import org.apache.solr.client.solrj.SolrQuery;
|
import org.apache.solr.client.solrj.SolrQuery;
|
||||||
@@ -69,6 +71,8 @@ class SolrChangeIndex implements ChangeIndex, LifecycleListener {
|
|||||||
public static final String CHANGES_CLOSED = "changes_closed";
|
public static final String CHANGES_CLOSED = "changes_closed";
|
||||||
private static final String ID_FIELD = ChangeField.LEGACY_ID.getName();
|
private static final String ID_FIELD = ChangeField.LEGACY_ID.getName();
|
||||||
|
|
||||||
|
private final Provider<ReviewDb> db;
|
||||||
|
private final ChangeData.Factory changeDataFactory;
|
||||||
private final FillArgs fillArgs;
|
private final FillArgs fillArgs;
|
||||||
private final SitePaths sitePaths;
|
private final SitePaths sitePaths;
|
||||||
private final IndexCollection indexes;
|
private final IndexCollection indexes;
|
||||||
@@ -78,11 +82,15 @@ class SolrChangeIndex implements ChangeIndex, LifecycleListener {
|
|||||||
|
|
||||||
SolrChangeIndex(
|
SolrChangeIndex(
|
||||||
@GerritServerConfig Config cfg,
|
@GerritServerConfig Config cfg,
|
||||||
|
Provider<ReviewDb> db,
|
||||||
|
ChangeData.Factory changeDataFactory,
|
||||||
FillArgs fillArgs,
|
FillArgs fillArgs,
|
||||||
SitePaths sitePaths,
|
SitePaths sitePaths,
|
||||||
IndexCollection indexes,
|
IndexCollection indexes,
|
||||||
Schema<ChangeData> schema,
|
Schema<ChangeData> schema,
|
||||||
String base) throws IOException {
|
String base) throws IOException {
|
||||||
|
this.db = db;
|
||||||
|
this.changeDataFactory = changeDataFactory;
|
||||||
this.fillArgs = fillArgs;
|
this.fillArgs = fillArgs;
|
||||||
this.sitePaths = sitePaths;
|
this.sitePaths = sitePaths;
|
||||||
this.indexes = indexes;
|
this.indexes = indexes;
|
||||||
@@ -256,7 +264,8 @@ class SolrChangeIndex implements ChangeIndex, LifecycleListener {
|
|||||||
List<ChangeData> result = Lists.newArrayListWithCapacity(docs.size());
|
List<ChangeData> result = Lists.newArrayListWithCapacity(docs.size());
|
||||||
for (SolrDocument doc : docs) {
|
for (SolrDocument doc : docs) {
|
||||||
Integer v = (Integer) doc.getFieldValue(ID_FIELD);
|
Integer v = (Integer) doc.getFieldValue(ID_FIELD);
|
||||||
result.add(new ChangeData(new Change.Id(v.intValue())));
|
result.add(
|
||||||
|
changeDataFactory.create(db.get(), new Change.Id(v.intValue())));
|
||||||
}
|
}
|
||||||
|
|
||||||
final List<ChangeData> r = Collections.unmodifiableList(result);
|
final List<ChangeData> r = Collections.unmodifiableList(result);
|
||||||
|
@@ -15,6 +15,7 @@
|
|||||||
package com.google.gerrit.solr;
|
package com.google.gerrit.solr;
|
||||||
|
|
||||||
import com.google.gerrit.lifecycle.LifecycleModule;
|
import com.google.gerrit.lifecycle.LifecycleModule;
|
||||||
|
import com.google.gerrit.reviewdb.server.ReviewDb;
|
||||||
import com.google.gerrit.server.config.GerritServerConfig;
|
import com.google.gerrit.server.config.GerritServerConfig;
|
||||||
import com.google.gerrit.server.config.SitePaths;
|
import com.google.gerrit.server.config.SitePaths;
|
||||||
import com.google.gerrit.server.index.ChangeIndex;
|
import com.google.gerrit.server.index.ChangeIndex;
|
||||||
@@ -22,6 +23,8 @@ import com.google.gerrit.server.index.ChangeSchemas;
|
|||||||
import com.google.gerrit.server.index.FieldDef.FillArgs;
|
import com.google.gerrit.server.index.FieldDef.FillArgs;
|
||||||
import com.google.gerrit.server.index.IndexCollection;
|
import com.google.gerrit.server.index.IndexCollection;
|
||||||
import com.google.gerrit.server.index.IndexModule;
|
import com.google.gerrit.server.index.IndexModule;
|
||||||
|
import com.google.gerrit.server.query.change.ChangeData;
|
||||||
|
import com.google.inject.Provider;
|
||||||
import com.google.inject.Provides;
|
import com.google.inject.Provides;
|
||||||
import com.google.inject.Singleton;
|
import com.google.inject.Singleton;
|
||||||
|
|
||||||
@@ -57,10 +60,12 @@ public class SolrIndexModule extends LifecycleModule {
|
|||||||
@Provides
|
@Provides
|
||||||
@Singleton
|
@Singleton
|
||||||
public SolrChangeIndex getChangeIndex(@GerritServerConfig Config cfg,
|
public SolrChangeIndex getChangeIndex(@GerritServerConfig Config cfg,
|
||||||
|
Provider<ReviewDb> db,
|
||||||
|
ChangeData.Factory changeDataFactory,
|
||||||
SitePaths sitePaths,
|
SitePaths sitePaths,
|
||||||
IndexCollection indexes,
|
IndexCollection indexes,
|
||||||
FillArgs fillArgs) throws IOException {
|
FillArgs fillArgs) throws IOException {
|
||||||
return new SolrChangeIndex(cfg, fillArgs, sitePaths, indexes,
|
return new SolrChangeIndex(cfg, db, changeDataFactory, fillArgs, sitePaths,
|
||||||
ChangeSchemas.getLatest(), base);
|
indexes, ChangeSchemas.getLatest(), base);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user