diff --git a/Documentation/rest-api-changes.txt b/Documentation/rest-api-changes.txt index 55b4800dec..d752c85a72 100644 --- a/Documentation/rest-api-changes.txt +++ b/Documentation/rest-api-changes.txt @@ -1073,7 +1073,11 @@ message is contained in the response body. -- Returns a list of all changes which are submitted when -link:#submit-change[\{submit\}] is called for this change. +link:#submit-change[\{submit\}] is called for this change, +including the current change itself. + +An empty list is returned if this change will be submitted +by itself (no other changes). .Request ---- diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/server/change/SubmittedTogetherIT.java b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/server/change/SubmittedTogetherIT.java index 342fe4cefb..6bf3f7f6c5 100644 --- a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/server/change/SubmittedTogetherIT.java +++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/server/change/SubmittedTogetherIT.java @@ -51,14 +51,14 @@ public class SubmittedTogetherIT extends AbstractDaemonTest { String id2 = getChangeId(c2_1); pushHead(testRepo, "refs/for/master", false); - assertSubmittedTogether(id1, id1); + assertSubmittedTogether(id1); assertSubmittedTogether(id2, id2, id1); } @Test public void respectsWholeTopicAndAncestors() throws Exception { RevCommit initialHead = getRemoteHead(); - // Create two independant commits and push. + // Create two independent commits and push. RevCommit c1_1 = commitBuilder() .add("a.txt", "1") .message("subject: 1") @@ -78,8 +78,45 @@ public class SubmittedTogetherIT extends AbstractDaemonTest { assertSubmittedTogether(id1, id2, id1); assertSubmittedTogether(id2, id2, id1); } else { - assertSubmittedTogether(id1, id1); - assertSubmittedTogether(id2, id2); + assertSubmittedTogether(id1); + assertSubmittedTogether(id2); + } + } + + @Test + public void testTopicChaining() throws Exception { + RevCommit initialHead = getRemoteHead(); + // Create two independent commits and push. + RevCommit c1_1 = commitBuilder() + .add("a.txt", "1") + .message("subject: 1") + .create(); + String id1 = getChangeId(c1_1); + pushHead(testRepo, "refs/for/master/" + name("connectingTopic"), false); + + testRepo.reset(initialHead); + RevCommit c2_1 = commitBuilder() + .add("b.txt", "2") + .message("subject: 2") + .create(); + String id2 = getChangeId(c2_1); + pushHead(testRepo, "refs/for/master/" + name("connectingTopic"), false); + + RevCommit c3_1 = commitBuilder() + .add("b.txt", "2") + .message("subject: 2") + .create(); + String id3 = getChangeId(c3_1); + pushHead(testRepo, "refs/for/master/" + name("unrelated-topic"), false); + + if (isSubmitWholeTopicEnabled()) { + assertSubmittedTogether(id1, id2, id1); + assertSubmittedTogether(id2, id2, id1); + assertSubmittedTogether(id3, id3, id2, id1); + } else { + assertSubmittedTogether(id1); + assertSubmittedTogether(id2); + assertSubmittedTogether(id3, id3, id2); } } @@ -102,8 +139,8 @@ public class SubmittedTogetherIT extends AbstractDaemonTest { String id2 = getChangeId(c2_1); pushHead(testRepo, "refs/for/master", false); - assertSubmittedTogether(id1, id1); - assertSubmittedTogether(id2, id2); + assertSubmittedTogether(id1); + assertSubmittedTogether(id2); } private void assertSubmittedTogether(String chId, String... expected) 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 2a7d03efb1..71e25a5806 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 @@ -32,6 +32,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; +import java.util.Collections; import java.util.EnumSet; import java.util.List; @@ -60,12 +61,16 @@ public class SubmittedTogether implements RestReadView { try { ChangeSet cs = mergeSuperSet.completeChangeSet(dbProvider.get(), ChangeSet.create(resource.getChange())); - return json.create(EnumSet.of( - ListChangesOption.CURRENT_REVISION, - ListChangesOption.CURRENT_COMMIT, - ListChangesOption.DETAILED_LABELS, - ListChangesOption.LABELS)) - .format(cs.ids()); + if (cs.ids().size() > 1) { + return json.create(EnumSet.of( + ListChangesOption.CURRENT_REVISION, + ListChangesOption.CURRENT_COMMIT, + ListChangesOption.DETAILED_LABELS, + ListChangesOption.LABELS)) + .format(cs.ids()); + } else { + return Collections.emptyList(); + } } catch (OrmException | IOException e) { log.error("Error on getting a ChangeSet", e); throw e;