diff --git a/java/com/google/gerrit/server/git/MergeUtil.java b/java/com/google/gerrit/server/git/MergeUtil.java index 4088c81db8..e464e818c2 100644 --- a/java/com/google/gerrit/server/git/MergeUtil.java +++ b/java/com/google/gerrit/server/git/MergeUtil.java @@ -17,15 +17,17 @@ package com.google.gerrit.server.git; import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkState; import static com.google.common.collect.ImmutableSet.toImmutableSet; +import static com.google.common.collect.ImmutableSortedSet.toImmutableSortedSet; import static com.google.gerrit.git.ObjectIds.abbreviateName; import static java.nio.charset.StandardCharsets.UTF_8; +import static java.util.Comparator.naturalOrder; import static java.util.Objects.requireNonNull; +import static java.util.stream.Collectors.joining; -import com.google.common.base.Joiner; import com.google.common.base.Strings; -import com.google.common.collect.FluentIterable; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; +import com.google.common.collect.ImmutableSortedSet; import com.google.common.collect.Iterables; import com.google.common.collect.Sets; import com.google.common.flogger.FluentLogger; @@ -68,7 +70,6 @@ import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.Iterator; -import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Objects; @@ -847,26 +848,22 @@ public class MergeUtil { return String.format("Merge \"%s\"", c.getShortMessage()); } - LinkedHashSet topics = new LinkedHashSet<>(4); - for (CodeReviewCommit c : merged) { - if (!Strings.isNullOrEmpty(c.change().getTopic())) { - topics.add(c.change().getTopic()); - } - } + ImmutableSortedSet topics = + merged.stream() + .map(c -> c.change().getTopic()) + .filter(t -> !Strings.isNullOrEmpty(t)) + .map(t -> "\"" + t + "\"") + .collect(toImmutableSortedSet(naturalOrder())); - if (topics.size() == 1) { - return String.format("Merge changes from topic \"%s\"", Iterables.getFirst(topics, null)); - } else if (topics.size() > 1) { - return String.format("Merge changes from topics \"%s\"", Joiner.on("\", \"").join(topics)); - } else { + if (!topics.isEmpty()) { return String.format( - "Merge changes %s%s", - FluentIterable.from(merged) - .limit(5) - .transform(c -> c.change().getKey().abbreviate()) - .join(Joiner.on(',')), - merged.size() > 5 ? ", ..." : ""); + "Merge changes from topic%s %s", + topics.size() > 1 ? "s" : "", topics.stream().collect(joining(", "))); } + return merged.stream() + .limit(5) + .map(c -> c.change().getKey().abbreviate()) + .collect(joining(",", "Merge changes ", merged.size() > 5 ? ", ..." : "")); } public ThreeWayMerger newThreeWayMerger(ObjectInserter inserter, Config repoConfig) { diff --git a/javatests/com/google/gerrit/acceptance/rest/change/AbstractSubmit.java b/javatests/com/google/gerrit/acceptance/rest/change/AbstractSubmit.java index f3c61ca82d..c2df9cac34 100644 --- a/javatests/com/google/gerrit/acceptance/rest/change/AbstractSubmit.java +++ b/javatests/com/google/gerrit/acceptance/rest/change/AbstractSubmit.java @@ -506,10 +506,10 @@ public abstract class AbstractSubmit extends AbstractDaemonTest { assume().that(isSubmitWholeTopicEnabled()).isTrue(); String topic1 = "test-topic-1"; String topic2 = "test-topic-2"; - PushOneCommit.Result change1 = createChange("Change 1", "a.txt", "content", topic2); - PushOneCommit.Result change2 = createChange("Change 2", "b.txt", "content", topic2); - PushOneCommit.Result change3 = createChange("Change 3", "c.txt", "content", topic1); - PushOneCommit.Result change4 = createChange("Change 4", "d.txt", "content", topic1); + PushOneCommit.Result change1 = createChange("Change 1", "a.txt", "content", topic1); + PushOneCommit.Result change2 = createChange("Change 2", "b.txt", "content", topic1); + PushOneCommit.Result change3 = createChange("Change 3", "c.txt", "content", topic2); + PushOneCommit.Result change4 = createChange("Change 4", "d.txt", "content", topic2); approve(change1.getChangeId()); approve(change2.getChangeId()); approve(change3.getChangeId()); @@ -518,12 +518,12 @@ public abstract class AbstractSubmit extends AbstractDaemonTest { String expectedTopic1 = name(topic1); String expectedTopic2 = name(topic2); if (getSubmitType() == SubmitType.CHERRY_PICK) { - change1.assertChange(Change.Status.NEW, expectedTopic2, admin); - change2.assertChange(Change.Status.NEW, expectedTopic2, admin); + change1.assertChange(Change.Status.NEW, expectedTopic1, admin); + change2.assertChange(Change.Status.NEW, expectedTopic1, admin); } else { - change1.assertChange(Change.Status.MERGED, expectedTopic2, admin); - change2.assertChange(Change.Status.MERGED, expectedTopic2, admin); + change1.assertChange(Change.Status.MERGED, expectedTopic1, admin); + change2.assertChange(Change.Status.MERGED, expectedTopic1, admin); } // Check for the exact change to have the correct submitter.