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:
parent
224746e0f2
commit
6ccff81428
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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…
Reference in New Issue