From 8a5b044a99deb7c6b2166c3f763f90b4e3d8d223 Mon Sep 17 00:00:00 2001 From: Han-Wen Nienhuys Date: Tue, 9 Oct 2018 16:22:06 +0200 Subject: [PATCH] InternalPushConnection: don't swallow RuntimeException Uncaught exceptions are handled by java.lang.Thread's handler, which prints it to stderr. This is useful because InternalPushConnection is used in tests, and during development, the server side may have programming errors that manifest as RuntimeExceptions. Before this change, all types of failures would lead to a uniform failure message "test://test/conn0: push not permitted" on the client. Signed-off-by: Han-Wen Nienhuys Change-Id: I0983cbeb86d36fa7a9313373f5fce54971f804ec --- .../jgit/transport/InternalPushConnection.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/InternalPushConnection.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/InternalPushConnection.java index 732be63dc..f05e0b8c7 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/InternalPushConnection.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/InternalPushConnection.java @@ -46,6 +46,7 @@ import java.io.IOException; import java.io.PipedInputStream; import java.io.PipedOutputStream; +import java.io.UncheckedIOException; import org.eclipse.jgit.errors.TransportException; import org.eclipse.jgit.internal.JGitText; @@ -103,10 +104,13 @@ public void run() { // Ignored. Client cannot use this repository. } catch (ServiceNotAuthorizedException e) { // Ignored. Client cannot use this repository. - } catch (IOException err) { - // Client side of the pipes should report the problem. - } catch (RuntimeException err) { - // Clients side will notice we went away, and report. + } catch (IOException e) { + // Since the InternalPushConnection + // is used in tests, we want to avoid hiding exceptions + // because they can point to programming errors on the server + // side. By rethrowing, the default handler will dump it + // to stderr. + throw new UncheckedIOException(e); } finally { try { out_r.close();