diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java index 94cfe6c0a..6de3848d8 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java @@ -2192,6 +2192,49 @@ public class ReceivePack { public void receive(final InputStream input, final OutputStream output, final OutputStream messages) throws IOException { init(input, output, messages); + try { + service(); + } catch (PackProtocolException e) { + fatalError(e.getMessage()); + throw e; + } catch (InputOverLimitIOException e) { + String msg = JGitText.get().tooManyCommands; + fatalError(msg); + throw new PackProtocolException(msg); + } finally { + try { + close(); + } finally { + release(); + } + } + } + + /** + * Execute the receive task on the socket. + * + *

+ * Same as {@link #receive}, but the exceptions are not reported to the + * client yet. + * + * @param input + * raw input to read client commands and pack data from. Caller + * must ensure the input is buffered, otherwise read performance + * may suffer. + * @param output + * response back to the Git network client. Caller must ensure + * the output is buffered, otherwise write performance may + * suffer. + * @param messages + * secondary "notice" channel to send additional messages out + * through. When run over SSH this should be tied back to the + * standard error channel of the command execution. For most + * other network connections this should be null. + * @throws java.io.IOException + */ + public void receiveWithExceptionPropagation(InputStream input, + OutputStream output, OutputStream messages) throws IOException { + init(input, output, messages); try { service(); } finally { @@ -2212,16 +2255,7 @@ public class ReceivePack { if (hasError()) return; - try { - recvCommands(); - } catch (PackProtocolException e) { - fatalError(e.getMessage()); - throw e; - } catch (InputOverLimitIOException e) { - String msg = JGitText.get().tooManyCommands; - fatalError(msg); - throw new PackProtocolException(msg); - } + recvCommands(); if (hasCommands()) { try (PostReceiveExecutor e = new PostReceiveExecutor()) {