diff options
author | Zhen Chen <czhen@google.com> | 2017-03-30 11:11:39 -0700 |
---|---|---|
committer | Zhen Chen <czhen@google.com> | 2017-03-30 11:11:39 -0700 |
commit | 15e9a266b3a9cb06f8ed131482409b7fc4c73278 (patch) | |
tree | 384a3c294eca413692ef83f8754ce1e99490c9c3 | |
parent | 62e6711dcdb035add1f27d57d911fbdec373d1c2 (diff) |
Fix the wrong order of RevWalk.isMergedInto in RebaseSorter
RevWalk.isMergedInto takes the base as first argument and the tip as
the second argument to check if the base is merged into the tip. The
test didn't detect it because in the test the base is the same as the
tip.
Also add a regression test for this bug.
Change-Id: I43742aa4bd75ea64e729c1d3ecf40369002c7e55
-rw-r--r-- | gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/change/AbstractSubmit.java | 42 | ||||
-rw-r--r-- | gerrit-server/src/main/java/com/google/gerrit/server/git/RebaseSorter.java | 4 |
2 files changed, 44 insertions, 2 deletions
diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/change/AbstractSubmit.java b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/change/AbstractSubmit.java index a00dd7c097..a9d24fc7cc 100644 --- a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/change/AbstractSubmit.java +++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/change/AbstractSubmit.java @@ -333,6 +333,48 @@ public abstract class AbstractSubmit extends AbstractDaemonTest { assertThat(log).contains(mergeReview.getCommit()); } + @Test + public void submitMergeOfNonChangeBranchNonTip() throws Exception { + // Merge a branch with commits that have not been submitted as + // changes. + // + // MC -- merge commit (pushed for review and submitted) + // |\ S2 -- new stable tip (pushed directly to refs/heads/stable) + // M \ / + // | S1 -- stable (pushed directly to refs/heads/stable) + // | / + // I -- master + // + RevCommit initial = getRemoteHead(project, "master"); + // push directly to stable to S1 + PushOneCommit.Result s1 = pushFactory.create( + db, admin.getIdent(), testRepo, "new commit into stable", "stable1.txt", "") + .to("refs/heads/stable"); + // move the stable tip ahead to S2 + pushFactory.create( + db, admin.getIdent(), testRepo, "Tip of branch stable", "stable2.txt", "") + .to("refs/heads/stable"); + + testRepo.reset(initial); + + // move the master ahead + PushOneCommit.Result m = pushFactory.create( + db, admin.getIdent(), testRepo, "Move master ahead", "master.txt", "") + .to("refs/heads/master"); + + // create merge change + PushOneCommit mc = + pushFactory.create(db, admin.getIdent(), testRepo, "The merge commit", "merge.txt", ""); + mc.setParents(ImmutableList.of(m.getCommit(), s1.getCommit())); + PushOneCommit.Result mergeReview = mc.to("refs/for/master"); + approve(mergeReview.getChangeId()); + submit(mergeReview.getChangeId()); + + List<RevCommit> log = getRemoteLog(); + assertThat(log).contains(s1.getCommit()); + assertThat(log).contains(mergeReview.getCommit()); + } + private void assertSubmitter(PushOneCommit.Result change) throws Exception { ChangeInfo info = get(change.getChangeId(), ListChangesOption.MESSAGES); assertThat(info.messages).isNotNull(); diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/RebaseSorter.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/RebaseSorter.java index 6cba75090a..fdf7c409d1 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/git/RebaseSorter.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/RebaseSorter.java @@ -94,8 +94,8 @@ public class RebaseSorter { mirw.reset(); mirw.markStart(commit); for (RevCommit accepted : alreadyAccepted) { - if (mirw.isMergedInto(mirw.parseCommit(accepted), - mirw.parseCommit(commit))) { + if (mirw.isMergedInto(mirw.parseCommit(commit), + mirw.parseCommit(accepted))) { return true; } } |