Browse Source

transport: Let users specify an error handler for unpacking a pack file

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>
tags/v5.7.0.202001151323-m1
Masaya Suzuki 4 years ago
parent
commit
6ccff81428

+ 19
- 1
org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java View 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);
}
}
}

+ 29
- 0
org.eclipse.jgit/src/org/eclipse/jgit/transport/UnpackErrorHandler.java View File

@@ -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;
}

Loading…
Cancel
Save