diff options
Diffstat (limited to 'gerrit-server/src/main/java/com/google/gerrit/server/git/strategy/SubmitDryRun.java')
-rw-r--r-- | gerrit-server/src/main/java/com/google/gerrit/server/git/strategy/SubmitDryRun.java | 26 |
1 files changed, 18 insertions, 8 deletions
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/strategy/SubmitDryRun.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/strategy/SubmitDryRun.java index d375b6ec75..3a954fb959 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/git/strategy/SubmitDryRun.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/strategy/SubmitDryRun.java @@ -14,7 +14,10 @@ package com.google.gerrit.server.git.strategy; -import com.google.common.collect.FluentIterable; +import static java.util.stream.Collectors.toSet; + +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Streams; import com.google.gerrit.extensions.client.SubmitType; import com.google.gerrit.reviewdb.client.Branch; import com.google.gerrit.server.git.CodeReviewCommit; @@ -37,6 +40,7 @@ import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.jgit.revwalk.RevFlag; import org.eclipse.jgit.revwalk.RevObject; +import org.eclipse.jgit.revwalk.RevTag; import org.eclipse.jgit.revwalk.RevWalk; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -59,10 +63,13 @@ public class SubmitDryRun { } } - public static Iterable<ObjectId> getAlreadyAccepted(Repository repo) throws IOException { - return FluentIterable.from(repo.getRefDatabase().getRefs(Constants.R_HEADS).values()) - .append(repo.getRefDatabase().getRefs(Constants.R_TAGS).values()) - .transform(Ref::getObjectId); + public static Set<ObjectId> getAlreadyAccepted(Repository repo) throws IOException { + return Streams.concat( + repo.getRefDatabase().getRefs(Constants.R_HEADS).values().stream(), + repo.getRefDatabase().getRefs(Constants.R_TAGS).values().stream()) + .map(Ref::getObjectId) + .filter(o -> o != null) + .collect(toSet()); } public static Set<RevCommit> getAlreadyAccepted(Repository repo, RevWalk rw) throws IOException { @@ -75,6 +82,9 @@ public class SubmitDryRun { throws IOException { for (ObjectId id : ids) { RevObject obj = rw.parseAny(id); + if (obj instanceof RevTag) { + obj = rw.peel(obj); + } if (obj instanceof RevCommit) { out.add((RevCommit) obj); } @@ -108,7 +118,7 @@ public class SubmitDryRun { repo, rw, mergeUtilFactory.create(getProject(destBranch)), - new MergeSorter(rw, alreadyAccepted, canMerge)); + new MergeSorter(rw, alreadyAccepted, canMerge, ImmutableSet.of(toMergeCommit))); switch (submitType) { case CHERRY_PICK: @@ -120,9 +130,9 @@ public class SubmitDryRun { case MERGE_IF_NECESSARY: return MergeIfNecessary.dryRun(args, tipCommit, toMergeCommit); case REBASE_IF_NECESSARY: - return RebaseIfNecessary.dryRun(args, tipCommit, toMergeCommit); + return RebaseIfNecessary.dryRun(args, repo, tipCommit, toMergeCommit); case REBASE_ALWAYS: - return RebaseAlways.dryRun(args, tipCommit, toMergeCommit); + return RebaseAlways.dryRun(args, repo, tipCommit, toMergeCommit); default: String errorMsg = "No submit strategy for: " + submitType; log.error(errorMsg); |