Merge "Fix: REST API /changes/?o=ALL_REVISIONS should return all revisions"
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/ChangeJson.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/ChangeJson.java
index e0c9df7..3c08bba6 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/change/ChangeJson.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/ChangeJson.java
@@ -208,7 +208,11 @@
List<List<ChangeInfo>> res = Lists.newArrayListWithCapacity(in.size());
for (List<ChangeData> changes : in) {
ChangeData.ensureChangeLoaded(db, changes);
- ChangeData.ensureCurrentPatchSetLoaded(db, changes);
+ if (has(ALL_REVISIONS)) {
+ ChangeData.ensureAllPatchSetsLoaded(db, changes);
+ } else {
+ ChangeData.ensureCurrentPatchSetLoaded(db, changes);
+ }
ChangeData.ensureCurrentApprovalsLoaded(db, changes);
res.add(toChangeInfo(changes));
}
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeData.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeData.java
index 506fabc..bf3b605 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeData.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeData.java
@@ -87,6 +87,13 @@
}
}
+ public static void ensureAllPatchSetsLoaded(Provider<ReviewDb> db,
+ List<ChangeData> changes) throws OrmException {
+ for (ChangeData cd : changes) {
+ cd.patches(db);
+ }
+ }
+
public static void ensureCurrentPatchSetLoaded(
Provider<ReviewDb> db, List<ChangeData> changes) throws OrmException {
Map<PatchSet.Id, ChangeData> missing = Maps.newHashMap();
@@ -141,6 +148,7 @@
private ChangeControl changeControl;
private List<ChangeMessage> messages;
private List<SubmitRecord> submitRecords;
+ private boolean patchesLoaded;
public ChangeData(final Change.Id id) {
legacyId = id;
@@ -321,7 +329,7 @@
*/
public Collection<PatchSet> patches(Provider<ReviewDb> db)
throws OrmException {
- if (patches == null) {
+ if (patches == null || !patchesLoaded) {
if (limitedIds != null) {
patches = Lists.newArrayList();
for (PatchSet ps : db.get().patchSets().byChange(legacyId)) {
@@ -332,6 +340,7 @@
} else {
patches = db.get().patchSets().byChange(legacyId).toList();
}
+ patchesLoaded = true;
}
return patches;
}