transport: Add methods that do not handle exceptions

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>
This commit is contained in:
Masaya Suzuki 2019-11-08 10:31:16 -08:00
parent 6ccff81428
commit e75e95e535
1 changed files with 44 additions and 10 deletions

View File

@ -2192,6 +2192,49 @@ public void setEchoCommandFailures(boolean echo) {
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 @@ private void service() throws IOException {
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()) {