]> source.dussan.org Git - jgit.git/commitdiff
transport: Add methods that do not handle exceptions 61/152361/2
authorMasaya Suzuki <masayasuzuki@google.com>
Fri, 8 Nov 2019 18:31:16 +0000 (10:31 -0800)
committerMasaya Suzuki <masayasuzuki@google.com>
Mon, 2 Dec 2019 22:09:55 +0000 (14:09 -0800)
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 <masayasuzuki@google.com>
org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java

index 94cfe6c0a3b755f198f0b5cf063c3eb2cd269f1c..6de3848d8e189d95bc1dbbfdc36c856c3702475b 100644 (file)
@@ -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.
+        *
+        * <p>
+        * 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()) {