Do not fail with ISE when an invalid base is specified on push ... instead reject the push with a proper error message. Release-Notes: Reject invalid base on push with proper error message instead of failing with an internal server error Signed-off-by: Edwin Kempin <ekempin@google.com> Change-Id: I5a7749fce1631f880b23c217d010b70bcee77545
diff --git a/java/com/google/gerrit/server/args4j/ObjectIdHandler.java b/java/com/google/gerrit/server/args4j/ObjectIdHandler.java index aa8a958..3cad7ce 100644 --- a/java/com/google/gerrit/server/args4j/ObjectIdHandler.java +++ b/java/com/google/gerrit/server/args4j/ObjectIdHandler.java
@@ -16,9 +16,11 @@ import com.google.inject.Inject; import com.google.inject.assistedinject.Assisted; +import org.eclipse.jgit.errors.InvalidObjectIdException; import org.eclipse.jgit.lib.ObjectId; import org.kohsuke.args4j.CmdLineException; import org.kohsuke.args4j.CmdLineParser; +import org.kohsuke.args4j.NamedOptionDef; import org.kohsuke.args4j.OptionDef; import org.kohsuke.args4j.spi.OptionHandler; import org.kohsuke.args4j.spi.Parameters; @@ -37,7 +39,14 @@ @Override public int parseArguments(Parameters params) throws CmdLineException { final String n = params.getParameter(0); - setter.addValue(ObjectId.fromString(n)); + try { + setter.addValue(ObjectId.fromString(n)); + } catch (InvalidObjectIdException e) { + throw new CmdLineException( + owner, + String.format("expected SHA1 for option %s: %s", ((NamedOptionDef) option).name(), n), + e); + } return 1; }
diff --git a/javatests/com/google/gerrit/acceptance/git/AbstractPushForReview.java b/javatests/com/google/gerrit/acceptance/git/AbstractPushForReview.java index 08f65da..db53555 100644 --- a/javatests/com/google/gerrit/acceptance/git/AbstractPushForReview.java +++ b/javatests/com/google/gerrit/acceptance/git/AbstractPushForReview.java
@@ -3061,6 +3061,12 @@ assertThat(r.getChange().attentionSet()).isEmpty(); } + @Test + public void pushWithInvalidBaseIsRejected() throws Exception { + PushOneCommit.Result r = pushTo("refs/for/master%base=invalid"); + r.assertErrorStatus("expected SHA1 for option --base: invalid"); + } + private DraftInput newDraft(String path, int line, String message) { DraftInput d = new DraftInput(); d.path = path;