Merge "SubmittedTogether: Only show tab if there is more than one change"
diff --git a/Documentation/rest-api-changes.txt b/Documentation/rest-api-changes.txt
index 55b4800..d752c85 100644
--- a/Documentation/rest-api-changes.txt
+++ b/Documentation/rest-api-changes.txt
@@ -1073,7 +1073,11 @@
--
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 342fe4c..6bf3f7f 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 @@
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 @@
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 @@
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 2a7d03e..71e25a5 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.LoggerFactory;
import java.io.IOException;
+import java.util.Collections;
import java.util.EnumSet;
import java.util.List;
@@ -60,12 +61,16 @@
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;