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
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 a00dd7c..a9d24fc 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 @@
     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 6cba750..fdf7c40 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 @@
       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;
         }
       }