Repository: karaf
Updated Branches:
  refs/heads/karaf-2.x c1bcfc02f -> 10208c4c4


[KARAF-2623] Improve exit code for SSH/client


Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/10208c4c
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/10208c4c
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/10208c4c

Branch: refs/heads/karaf-2.x
Commit: 10208c4c4f01a1638098d2e0c786cd1d3aef9dac
Parents: c1bcfc0
Author: Jean-Baptiste Onofré <[email protected]>
Authored: Mon Apr 7 09:52:29 2014 +0200
Committer: Jean-Baptiste Onofré <[email protected]>
Committed: Mon Apr 7 09:52:29 2014 +0200

----------------------------------------------------------------------
 client/src/main/java/org/apache/karaf/client/Main.java        | 6 +++++-
 .../java/org/apache/karaf/shell/ssh/ShellCommandFactory.java  | 7 +++++--
 2 files changed, 10 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/karaf/blob/10208c4c/client/src/main/java/org/apache/karaf/client/Main.java
----------------------------------------------------------------------
diff --git a/client/src/main/java/org/apache/karaf/client/Main.java 
b/client/src/main/java/org/apache/karaf/client/Main.java
index a025fb3..d6b8150 100644
--- a/client/src/main/java/org/apache/karaf/client/Main.java
+++ b/client/src/main/java/org/apache/karaf/client/Main.java
@@ -139,6 +139,7 @@ public class Main {
         SshClient client = null;
         Terminal terminal = null;
         SshAgent agent = null;
+        int exitStatus = 0;
         try {
             agent = startAgent(user);
             client = SshClient.setUpDefaultClient();
@@ -201,6 +202,9 @@ public class Main {
             channel.setErr(AnsiConsole.wrapOutputStream(System.err));
             channel.open();
             channel.waitFor(ClientChannel.CLOSED, 0);
+            if (channel.getExitStatus() != null) {
+                exitStatus = channel.getExitStatus();
+            }
         } catch (Throwable t) {
             if (level > 1) {
                 t.printStackTrace();
@@ -218,7 +222,7 @@ public class Main {
                 }
             } catch (Throwable t) { }
         }
-        System.exit(0);
+        System.exit(exitStatus);
     }
 
     protected static SshAgent startAgent(String user) {

http://git-wip-us.apache.org/repos/asf/karaf/blob/10208c4c/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/ShellCommandFactory.java
----------------------------------------------------------------------
diff --git 
a/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/ShellCommandFactory.java 
b/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/ShellCommandFactory.java
index 7ffca91..ce6d3b6 100644
--- 
a/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/ShellCommandFactory.java
+++ 
b/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/ShellCommandFactory.java
@@ -97,6 +97,7 @@ public class ShellCommandFactory implements CommandFactory {
         }
 
         public void start(final Environment env) throws IOException {
+            int exitStatus = 0;
             try {
                 final CommandSession session = 
commandProcessor.createSession(in, new PrintStream(out), new PrintStream(err));
                 session.put("SCOPE", "shell:osgi:*");
@@ -129,6 +130,7 @@ public class ShellCommandFactory implements CommandFactory {
                         session.getConsole().println(session.format(result, 
Converter.INSPECT));
                     }
                 } catch (Throwable t) {
+                    exitStatus = 1;
                     try {
                         boolean isCommandNotFound = 
"org.apache.felix.gogo.runtime.CommandNotFoundException".equals(t.getClass().getName());
                         if (isCommandNotFound) {
@@ -149,7 +151,7 @@ public class ShellCommandFactory implements CommandFactory {
                                     .fg(Ansi.Color.DEFAULT).toString();
                             session.getConsole().println(str);
                         }
-                        if ( getBoolean(session, Console.PRINT_STACK_TRACES)) {
+                        if (getBoolean(session, Console.PRINT_STACK_TRACES)) {
                             
session.getConsole().print(Ansi.ansi().fg(Ansi.Color.RED).toString());
                             t.printStackTrace(session.getConsole());
                             
session.getConsole().print(Ansi.ansi().fg(Ansi.Color.DEFAULT).toString());
@@ -166,10 +168,11 @@ public class ShellCommandFactory implements 
CommandFactory {
                     }
                 }
             } catch (Exception e) {
+                exitStatus = 1;
                 throw (IOException) new IOException("Unable to start 
shell").initCause(e);
             } finally {
                 close(in, out, err);
-                callback.onExit(0);
+                callback.onExit(exitStatus);
             }
         }
 

Reply via email to