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(