From e75e95e5352b790e542898b1cad8fc7230246447 Mon Sep 17 00:00:00 2001 From: Masaya Suzuki Date: Fri, 8 Nov 2019 10:31:16 -0800 Subject: [PATCH] transport: Add methods that do not handle exceptions Same as UploadPack. These methods do not handle exceptions and the caller can handle them. This makes it possible to customize the error handling. Change-Id: Ia5203f80133cb5b3e5d754859b4167ac920eaf14 Signed-off-by: Masaya Suzuki --- .../eclipse/jgit/transport/ReceivePack.java | 54 +++++++++++++++---- 1 file changed, 44 insertions(+), 10 deletions(-) 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()) {