CreateChange: Do not fail with ISE if base commit doesn't exist
Signed-off-by: Edwin Kempin <ekempin@google.com>
Change-Id: If2886342815234d385e10d7ba7fe27127229ad4a
diff --git a/java/com/google/gerrit/server/restapi/change/CreateChange.java b/java/com/google/gerrit/server/restapi/change/CreateChange.java
index 9be1070..b6a242c 100644
--- a/java/com/google/gerrit/server/restapi/change/CreateChange.java
+++ b/java/com/google/gerrit/server/restapi/change/CreateChange.java
@@ -81,6 +81,7 @@
import java.util.TimeZone;
import org.eclipse.jgit.errors.ConfigInvalidException;
import org.eclipse.jgit.errors.InvalidObjectIdException;
+import org.eclipse.jgit.errors.MissingObjectException;
import org.eclipse.jgit.errors.NoMergeBaseException;
import org.eclipse.jgit.errors.NoMergeBaseException.MergeBaseFailureReason;
import org.eclipse.jgit.lib.CommitBuilder;
@@ -362,7 +363,12 @@
String.format("Base %s doesn't represent a valid SHA-1", baseCommit));
}
- RevCommit parentRevCommit = revWalk.parseCommit(parentCommit);
+ RevCommit parentRevCommit;
+ try {
+ parentRevCommit = revWalk.parseCommit(parentCommit);
+ } catch (MissingObjectException e) {
+ throw new UnprocessableEntityException(String.format("Base %s doesn't exist", baseCommit));
+ }
if (destRef == null) {
throw new BadRequestException("Destination branch does not exist");
diff --git a/javatests/com/google/gerrit/acceptance/rest/change/CreateChangeIT.java b/javatests/com/google/gerrit/acceptance/rest/change/CreateChangeIT.java
index bd1c882..10428c5 100644
--- a/javatests/com/google/gerrit/acceptance/rest/change/CreateChangeIT.java
+++ b/javatests/com/google/gerrit/acceptance/rest/change/CreateChangeIT.java
@@ -246,6 +246,16 @@
}
@Test
+ public void createChangeWithNonExistingParentCommitFails() throws Exception {
+ ChangeInput input = newChangeInput(ChangeStatus.NEW);
+ input.baseCommit = "deadbeefdeadbeefdeadbeefdeadbeefdeadbeef";
+ assertCreateFails(
+ input,
+ UnprocessableEntityException.class,
+ String.format("Base %s doesn't exist", input.baseCommit));
+ }
+
+ @Test
public void createChangeWithParentCommitOnWrongBranchFails() throws Exception {
Map<String, PushOneCommit.Result> setup =
changeInTwoBranches("foo", "foo.txt", "bar", "bar.txt");