ReceivePack: Use try-with-resources for PostReceiveHook
Instead of dropping a second exception, use try-with-resources so that exception thrown by a hook is attached as a suppressed exception. This removes a need of holding an exception that is thrown while unpacking an incoming packfile. Change-Id: I74d8b944931abbf53d9d1ae5db2e889639fba027 Signed-off-by: Masaya Suzuki <masayasuzuki@google.com>
This commit is contained in:
parent
4fcc43a1de
commit
224746e0f2
|
@ -2213,18 +2213,19 @@ private void service() throws IOException {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hasCommands()) {
|
if (hasCommands()) {
|
||||||
Throwable unpackError = null;
|
try (PostReceiveExecutor e = new PostReceiveExecutor()) {
|
||||||
if (needPack()) {
|
if (needPack()) {
|
||||||
try {
|
try {
|
||||||
receivePackAndCheckConnectivity();
|
receivePackAndCheckConnectivity();
|
||||||
} catch (IOException | RuntimeException
|
} catch (IOException | RuntimeException
|
||||||
| SubmoduleValidationException | Error err) {
|
| SubmoduleValidationException | Error err) {
|
||||||
unpackError = err;
|
unlockPack();
|
||||||
|
sendStatusReport(err);
|
||||||
|
throw new UnpackException(err);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (unpackError == null) {
|
|
||||||
setAtomic(isCapabilityEnabled(CAPABILITY_ATOMIC));
|
setAtomic(isCapabilityEnabled(CAPABILITY_ATOMIC));
|
||||||
|
|
||||||
validateCommands();
|
validateCommands();
|
||||||
|
@ -2238,24 +2239,12 @@ private void service() throws IOException {
|
||||||
failPendingCommands();
|
failPendingCommands();
|
||||||
}
|
}
|
||||||
executeCommands();
|
executeCommands();
|
||||||
|
} finally {
|
||||||
|
unlockPack();
|
||||||
}
|
}
|
||||||
} finally {
|
|
||||||
unlockPack();
|
|
||||||
}
|
|
||||||
|
|
||||||
sendStatusReport(unpackError);
|
sendStatusReport(null);
|
||||||
|
|
||||||
if (unpackError != null) {
|
|
||||||
// we already know which exception to throw. Ignore
|
|
||||||
// potential additional exceptions raised in postReceiveHooks
|
|
||||||
try {
|
|
||||||
postReceive.onPostReceive(this, filterCommands(Result.OK));
|
|
||||||
} catch (Throwable e) {
|
|
||||||
// empty
|
|
||||||
}
|
|
||||||
throw new UnpackException(unpackError);
|
|
||||||
}
|
}
|
||||||
postReceive.onPostReceive(this, filterCommands(Result.OK));
|
|
||||||
autoGc();
|
autoGc();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2292,4 +2281,12 @@ static ReceiveCommand parseCommand(String line)
|
||||||
}
|
}
|
||||||
return new ReceiveCommand(oldId, newId, name);
|
return new ReceiveCommand(oldId, newId, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private class PostReceiveExecutor implements AutoCloseable {
|
||||||
|
@Override
|
||||||
|
public void close() {
|
||||||
|
postReceive.onPostReceive(ReceivePack.this,
|
||||||
|
filterCommands(Result.OK));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue