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 d0a3eed569..81ad9df999 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 @@ -177,6 +177,53 @@ public class SubmittedTogetherIT extends AbstractDaemonTest { } } + @Test + public void respectTopicsOnAncestors() throws Exception { + RevCommit initialHead = getRemoteHead(); + + 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("otherConnectingTopic"), false); + + RevCommit c3_1 = commitBuilder().add("b.txt", "3").message("subject: 3").create(); + String id3 = getChangeId(c3_1); + pushHead(testRepo, "refs/for/master/" + name("connectingTopic"), false); + + RevCommit c4_1 = commitBuilder().add("b.txt", "4").message("subject: 4").create(); + String id4 = getChangeId(c4_1); + pushHead(testRepo, "refs/for/master", false); + + testRepo.reset(initialHead); + RevCommit c5_1 = commitBuilder().add("c.txt", "5").message("subject: 5").create(); + String id5 = getChangeId(c5_1); + pushHead(testRepo, "refs/for/master", false); + + RevCommit c6_1 = commitBuilder().add("c.txt", "6").message("subject: 6").create(); + String id6 = getChangeId(c6_1); + pushHead(testRepo, "refs/for/master/" + name("otherConnectingTopic"), false); + + if (isSubmitWholeTopicEnabled()) { + assertSubmittedTogether(id1, id6, id5, id3, id2, id1); + assertSubmittedTogether(id2, id6, id5, id2); + assertSubmittedTogether(id3, id6, id5, id3, id2, id1); + assertSubmittedTogether(id4, id6, id5, id4, id3, id2, id1); + assertSubmittedTogether(id5); + assertSubmittedTogether(id6, id6, id5, id2); + } else { + assertSubmittedTogether(id1); + assertSubmittedTogether(id2); + assertSubmittedTogether(id3, id3, id2); + assertSubmittedTogether(id4, id4, id3, id2); + assertSubmittedTogether(id5); + assertSubmittedTogether(id6, id6, id5); + } + } + @Test public void newBranchTwoChangesTogether() throws Exception { Project.NameKey p1 = createProject("a-new-project", null, false); diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/MergeSuperSet.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/MergeSuperSet.java index 29627e3f00..b473d202af 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/git/MergeSuperSet.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/MergeSuperSet.java @@ -194,12 +194,13 @@ public class MergeSuperSet { int oldSeen; int seen = 0; + changeSet = topicClosure(db, changeSet, user, topicsSeen, visibleTopicsSeen); + seen = topicsSeen.size() + visibleTopicsSeen.size(); + do { oldSeen = seen; - - changeSet = topicClosure(db, changeSet, user, topicsSeen, visibleTopicsSeen); changeSet = mergeSuperSetComputation.get().completeWithoutTopic(db, orm, changeSet, user); - + changeSet = topicClosure(db, changeSet, user, topicsSeen, visibleTopicsSeen); seen = topicsSeen.size() + visibleTopicsSeen.size(); } while (seen != oldSeen); return changeSet;