Merge "AbstractSubmit: Format with google-java-format"
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 f7bc3e9..94fa99b 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
@@ -589,6 +589,50 @@
   }
 
   @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());
+  }
+
+  @Test
   public void submitChangeWithCommitThatWasAlreadyMerged() throws Exception {
     // create and submit a change
     PushOneCommit.Result change = createChange();
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 4df1f24..94e78f8 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
@@ -105,7 +105,7 @@
       mirw.markStart(commit);
       // check if the commit is merged in other branches
       for (RevCommit accepted : alreadyAccepted) {
-        if (mirw.isMergedInto(mirw.parseCommit(accepted), mirw.parseCommit(commit))) {
+        if (mirw.isMergedInto(mirw.parseCommit(commit), mirw.parseCommit(accepted))) {
           log.debug(
               "Dependency {} merged into branch head {}.", commit.getName(), accepted.getName());
           return true;