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>
stable-5.7
Masaya Suzuki 5 years ago
parent
commit
6ccff81428
  1. 20
      org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java
  2. 29
      org.eclipse.jgit/src/org/eclipse/jgit/transport/UnpackErrorHandler.java

20
org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java

@ -299,6 +299,8 @@ public class ReceivePack {
// Use the default implementation. // Use the default implementation.
}; };
private UnpackErrorHandler unpackErrorHandler = new DefaultUnpackErrorHandler();
/** Hook to report on the commands after execution. */ /** Hook to report on the commands after execution. */
private PostReceiveHook postReceive; private PostReceiveHook postReceive;
@ -2144,6 +2146,15 @@ public class ReceivePack {
postReceive = h != null ? h : PostReceiveHook.NULL; 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 * Set whether this class will report command failures as warning messages
* before sending the command results. * before sending the command results.
@ -2220,7 +2231,7 @@ public class ReceivePack {
} catch (IOException | RuntimeException } catch (IOException | RuntimeException
| SubmoduleValidationException | Error err) { | SubmoduleValidationException | Error err) {
unlockPack(); unlockPack();
sendStatusReport(err); unpackErrorHandler.handleUnpackException(err);
throw new UnpackException(err); throw new UnpackException(err);
} }
} }
@ -2289,4 +2300,11 @@ public class ReceivePack {
filterCommands(Result.OK)); filterCommands(Result.OK));
} }
} }
private class DefaultUnpackErrorHandler implements UnpackErrorHandler {
@Override
public void handleUnpackException(Throwable t) throws IOException {
sendStatusReport(t);
}
}
} }

29
org.eclipse.jgit/src/org/eclipse/jgit/transport/UnpackErrorHandler.java

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