]> source.dussan.org Git - jgit.git/commitdiff
transport: Let users specify an error handler for unpacking a pack file 60/152360/2
authorMasaya Suzuki <masayasuzuki@google.com>
Fri, 8 Nov 2019 18:12:20 +0000 (10:12 -0800)
committerMasaya Suzuki <masayasuzuki@google.com>
Mon, 2 Dec 2019 22:03:46 +0000 (14:03 -0800)
Currently, there's no way for a user to customize the error handler for
the exception happened during unpacking an incoming pack file. Create an
error handler class and let them specify one.

Change-Id: Id07638ee58c88e1365181c3ddd17ee0266f3934d
Signed-off-by: Masaya Suzuki <masayasuzuki@google.com>
org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java
org.eclipse.jgit/src/org/eclipse/jgit/transport/UnpackErrorHandler.java [new file with mode: 0644]

index 32c9abc1acb79956a5270e9fbd492316b690601f..94cfe6c0a3b755f198f0b5cf063c3eb2cd269f1c 100644 (file)
@@ -299,6 +299,8 @@ public class ReceivePack {
                // Use the default implementation.
        };
 
+       private UnpackErrorHandler unpackErrorHandler = new DefaultUnpackErrorHandler();
+
        /** Hook to report on the commands after execution. */
        private PostReceiveHook postReceive;
 
@@ -2144,6 +2146,15 @@ public class ReceivePack {
                postReceive = h != null ? h : PostReceiveHook.NULL;
        }
 
+       /**
+        * @param unpackErrorHandler
+        *            the unpackErrorHandler to set
+        * @since 5.7
+        */
+       public void setUnpackErrorHandler(UnpackErrorHandler unpackErrorHandler) {
+               this.unpackErrorHandler = unpackErrorHandler;
+       }
+
        /**
         * Set whether this class will report command failures as warning messages
         * before sending the command results.
@@ -2220,7 +2231,7 @@ public class ReceivePack {
                                        } catch (IOException | RuntimeException
                                                        | SubmoduleValidationException | Error err) {
                                                unlockPack();
-                                               sendStatusReport(err);
+                                               unpackErrorHandler.handleUnpackException(err);
                                                throw new UnpackException(err);
                                        }
                                }
@@ -2289,4 +2300,11 @@ public class ReceivePack {
                                        filterCommands(Result.OK));
                }
        }
+
+       private class DefaultUnpackErrorHandler implements UnpackErrorHandler {
+               @Override
+               public void handleUnpackException(Throwable t) throws IOException {
+                       sendStatusReport(t);
+               }
+       }
 }
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/UnpackErrorHandler.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/UnpackErrorHandler.java
new file mode 100644 (file)
index 0000000..12c9a76
--- /dev/null
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2019, Google LLC  and others
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Distribution License v. 1.0 which is available at
+ * http://www.eclipse.org/org/documents/edl-v10.php.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+package org.eclipse.jgit.transport;
+
+import java.io.IOException;
+
+/**
+ * Exception handler for processing an incoming pack file.
+ *
+ * @since 5.7
+ */
+public interface UnpackErrorHandler {
+       /**
+        * Handle an exception thrown while unpacking the pack file.
+        *
+        * @param t
+        *            exception thrown
+        * @throws IOException
+        *             thrown when failed to write an error back to the client.
+        */
+       void handleUnpackException(Throwable t) throws IOException;
+}