From 41c99c9086fca3d9e926ab240d69ea1f1c485ada Mon Sep 17 00:00:00 2001 From: Edwin Kempin Date: Tue, 8 Oct 2019 14:33:22 +0200 Subject: [PATCH] CreateChange: Do not fail with ISE if base commit doesn't exist Signed-off-by: Edwin Kempin Change-Id: If2886342815234d385e10d7ba7fe27127229ad4a --- .../gerrit/server/restapi/change/CreateChange.java | 8 +++++++- .../gerrit/acceptance/rest/change/CreateChangeIT.java | 10 ++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/java/com/google/gerrit/server/restapi/change/CreateChange.java b/java/com/google/gerrit/server/restapi/change/CreateChange.java index 9be1070068..b6a242cfbf 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.List; 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 @@ public class CreateChange 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 bd1c882c02..10428c56dc 100644 --- a/javatests/com/google/gerrit/acceptance/rest/change/CreateChangeIT.java +++ b/javatests/com/google/gerrit/acceptance/rest/change/CreateChangeIT.java @@ -245,6 +245,16 @@ public class CreateChangeIT extends AbstractDaemonTest { input, UnprocessableEntityException.class, "Base notasha1 doesn't represent a valid SHA-1"); } + @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 setup =