From 977596b209866d52aee2f12f722403e367bc7ebd Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Fri, 21 Mar 2014 15:53:44 +0100 Subject: [PATCH] Avoid calls to System.exit() and throw an exception instead The exception is caught in Main and System.exit() is called. Bug: 413522 Change-Id: Ibe68f7104d4fd55b832000a7840c07a169e7dd58 Signed-off-by: Guillaume Nodet Signed-off-by: Matthias Sohn --- .../src/org/eclipse/jgit/pgm/Die.java | 23 +++++++++++++++++++ .../src/org/eclipse/jgit/pgm/Main.java | 2 ++ .../src/org/eclipse/jgit/pgm/TextBuiltin.java | 14 +++++++++-- 3 files changed, 37 insertions(+), 2 deletions(-) diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Die.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Die.java index a2f4060821..f07df1a4b5 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Die.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Die.java @@ -54,6 +54,8 @@ package org.eclipse.jgit.pgm; public class Die extends RuntimeException { private static final long serialVersionUID = 1L; + private boolean aborted; + /** * Construct a new message explaining what has gone wrong. * @@ -75,4 +77,25 @@ public class Die extends RuntimeException { public Die(final String why, final Throwable cause) { super(why, cause); } + + /** + * Construct a new exception reflecting the fact that the + * command execution has been aborted before running. + * + * @param aborted boolean indicating the fact the execution has been aborted + * @since 3.4 + */ + public Die(boolean aborted) { + this.aborted = aborted; + } + + /** + * Check if this exception should cause the execution to be aborted. + * + * @return boolean indicating that the execution should be aborted + * @since 3.4 + */ + public boolean isAborted() { + return aborted; + } } diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Main.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Main.java index 3648ffd8e4..94591393af 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Main.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Main.java @@ -123,6 +123,8 @@ public class Main { configureHttpProxy(); execute(argv); } catch (Die err) { + if (err.isAborted()) + System.exit(1); System.err.println(MessageFormat.format(CLIText.get().fatalError, err.getMessage())); if (showStackTrace) err.printStackTrace(); diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/TextBuiltin.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/TextBuiltin.java index 3308fda0e3..8e8b82fe07 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/TextBuiltin.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/TextBuiltin.java @@ -227,7 +227,7 @@ public abstract class TextBuiltin { } catch (CmdLineException err) { if (!help) { this.errw.println(MessageFormat.format(CLIText.get().fatalError, err.getMessage())); - System.exit(1); + throw die(true); } } @@ -267,7 +267,7 @@ public abstract class TextBuiltin { errw.println(); errw.flush(); - System.exit(1); + throw die(true); } /** @@ -324,6 +324,16 @@ public abstract class TextBuiltin { return new Die(why, cause); } + /** + * @param aborted + * boolean indicating that the execution has been aborted before running + * @return a runtime exception the caller is expected to throw + * @since 3.4 + */ + protected static Die die(boolean aborted) { + return new Die(aborted); + } + String abbreviateRef(String dst, boolean abbreviateRemote) { if (dst.startsWith(R_HEADS)) dst = dst.substring(R_HEADS.length()); -- 2.39.5