diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/change/SubmitByFastForwardIT.java b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/change/SubmitByFastForwardIT.java index 9aa4b345d9..a87b7d911f 100644 --- a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/change/SubmitByFastForwardIT.java +++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/change/SubmitByFastForwardIT.java @@ -61,8 +61,8 @@ public class SubmitByFastForwardIT extends AbstractSubmit { assertSubmitter(change2.getChangeId(), 1); assertPersonEquals(admin.getIdent(), head.getAuthorIdent()); assertPersonEquals(admin.getIdent(), head.getCommitterIdent()); - assertSubmittedTogether(id1, id1, id2); - assertSubmittedTogether(id2, id1, id2); + assertSubmittedTogether(id1, id2, id1); + assertSubmittedTogether(id2, id2, id1); } @Test diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/SubmittedTogether.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/SubmittedTogether.java index a95759cf29..7fe738daed 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/SubmittedTogether.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/SubmittedTogether.java @@ -80,9 +80,15 @@ public class SubmittedTogether implements RestReadView { } else { cds = getForAbandonedChange(); } + if (cds.size() <= 1) { cds = Collections.emptyList(); + } else { + // Skip sorting for singleton lists, to avoid WalkSorter opening the + // repo just to fill out the commit field in PatchSetData. + cds = sort(cds); } + return json.create(EnumSet.of( ListChangesOption.CURRENT_REVISION, ListChangesOption.CURRENT_COMMIT)) @@ -99,24 +105,20 @@ public class SubmittedTogether implements RestReadView { return cs.changes().asList(); } - private List getForMergedChange(Change c) - throws OrmException, IOException { - String subId = c.getSubmissionId(); - List cds = queryProvider.get().bySubmissionId(subId); - if (cds.size() <= 1) { - // Bypass WalkSorter to avoid opening the repo just to populate the commit - // field in PatchSetData that we would throw out in apply() above anyway. - return Collections.emptyList(); - } + private List getForMergedChange(Change c) throws OrmException { + return queryProvider.get().bySubmissionId(c.getSubmissionId()); + } + private List getForAbandonedChange() { + return Collections.emptyList(); + } + + private List sort(List cds) + throws OrmException, IOException { List sorted = new ArrayList<>(cds.size()); for (PatchSetData psd : sorter.get().sort(cds)) { sorted.add(psd.data()); } return sorted; } - - private List getForAbandonedChange() { - return Collections.emptyList(); - } }