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