summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZhen Chen <czhen@google.com>2017-03-30 11:11:39 -0700
committerZhen Chen <czhen@google.com>2017-03-30 11:11:39 -0700
commit15e9a266b3a9cb06f8ed131482409b7fc4c73278 (patch)
tree384a3c294eca413692ef83f8754ce1e99490c9c3
parent62e6711dcdb035add1f27d57d911fbdec373d1c2 (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.java42
-rw-r--r--gerrit-server/src/main/java/com/google/gerrit/server/git/RebaseSorter.java4
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;
}
}