Merge "Fix index out of bounds exception when nothing able to merge"
diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/change/SubmitByMergeIfNecessaryIT.java b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/change/SubmitByMergeIfNecessaryIT.java
index c0e0efd..300905e 100644
--- a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/change/SubmitByMergeIfNecessaryIT.java
+++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/change/SubmitByMergeIfNecessaryIT.java
@@ -4,11 +4,14 @@
 
 import com.google.gerrit.acceptance.GitUtil;
 import com.google.gerrit.acceptance.PushOneCommit;
+import com.google.gerrit.acceptance.TestProjectInput;
 import com.google.gerrit.extensions.api.changes.ChangeApi;
 import com.google.gerrit.extensions.api.changes.CherryPickInput;
 import com.google.gerrit.extensions.api.changes.ReviewInput;
+import com.google.gerrit.extensions.api.changes.SubmitInput;
 import com.google.gerrit.extensions.api.projects.BranchInput;
 import com.google.gerrit.extensions.client.SubmitType;
+import com.google.gerrit.extensions.restapi.ResourceConflictException;
 import com.google.gerrit.reviewdb.client.Project;
 
 import org.eclipse.jgit.junit.TestRepository;
@@ -414,4 +417,21 @@
         "Change " + change3.getPatchSetId().getParentKey().get() +
         ": depends on change that was not submitted");
   }
+
+  @Test
+  @TestProjectInput(createEmptyCommit = false)
+  public void mergeWithMissingChange() throws Exception {
+    // create a draft change
+    PushOneCommit.Result draftResult = createDraftChange();
+
+    // create a new change based on the draft change
+    PushOneCommit.Result changeResult = createChange();
+
+    // delete the draft change
+    gApi.changes().id(draftResult.getChangeId()).delete();
+
+    // approve and submit the change
+    submit(changeResult.getChangeId(), new SubmitInput(),
+        ResourceConflictException.class, "nothing to merge", false);
+  }
 }
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/strategy/MergeIfNecessary.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/strategy/MergeIfNecessary.java
index 96cfffd..b840861 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/git/strategy/MergeIfNecessary.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/strategy/MergeIfNecessary.java
@@ -34,6 +34,9 @@
     List<SubmitStrategyOp> ops = new ArrayList<>(sorted.size());
     CodeReviewCommit firstFastForward;
     if (args.mergeTip.getInitialTip() == null) {
+      if (sorted.isEmpty()) {
+        throw new IntegrationException("nothing to merge");
+      }
       firstFastForward = sorted.remove(0);
     } else {
       firstFastForward = args.mergeUtil.getFirstFastForward(