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>
This commit is contained in:
Masaya Suzuki 2019-11-08 10:12:20 -08:00
parent 224746e0f2
commit 6ccff81428
2 changed files with 48 additions and 1 deletions

View File

@ -299,6 +299,8 @@ public Set<String> getCapabilities() {
// 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 void setPostReceiveHook(PostReceiveHook h) {
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 @@ private void service() throws IOException {
} catch (IOException | RuntimeException
| SubmoduleValidationException | Error err) {
unlockPack();
sendStatusReport(err);
unpackErrorHandler.handleUnpackException(err);
throw new UnpackException(err);
}
}
@ -2289,4 +2300,11 @@ public void close() {
filterCommands(Result.OK));
}
}
private class DefaultUnpackErrorHandler implements UnpackErrorHandler {
@Override
public void handleUnpackException(Throwable t) throws IOException {
sendStatusReport(t);
}
}
}

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