You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2019/04/24 12:31:50 UTC

[sling-org-apache-sling-committer-cli] 21/44: SLING-8339 - CLI hangs when an unhandled exception occurs

This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to branch feature/SLING-8337
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-committer-cli.git

commit e11e596afaf7ee8a02af73b04ff3ca3ac097078e
Author: Robert Munteanu <ro...@apache.org>
AuthorDate: Mon Apr 1 18:49:51 2019 +0200

    SLING-8339 - CLI hangs when an unhandled exception occurs
    
    Allow commands to throw exceptions and stop the framework whenever
    such an error is thrown.
---
 .../java/org/apache/sling/cli/impl/Command.java    |  2 +-
 .../apache/sling/cli/impl/CommandProcessor.java    | 22 ++++++++++++++--------
 2 files changed, 15 insertions(+), 9 deletions(-)

diff --git a/src/main/java/org/apache/sling/cli/impl/Command.java b/src/main/java/org/apache/sling/cli/impl/Command.java
index 4caeea7..4b015c4 100644
--- a/src/main/java/org/apache/sling/cli/impl/Command.java
+++ b/src/main/java/org/apache/sling/cli/impl/Command.java
@@ -22,5 +22,5 @@ public interface Command {
     String PROPERTY_NAME_SUBCOMMAND = "subcommand";
     String PROPERTY_NAME_SUMMARY = "summary";
 
-    void execute(String target);
+    void execute(String target) throws Exception;
 }
diff --git a/src/main/java/org/apache/sling/cli/impl/CommandProcessor.java b/src/main/java/org/apache/sling/cli/impl/CommandProcessor.java
index 57e5430..6ca6bca 100644
--- a/src/main/java/org/apache/sling/cli/impl/CommandProcessor.java
+++ b/src/main/java/org/apache/sling/cli/impl/CommandProcessor.java
@@ -57,16 +57,22 @@ public class CommandProcessor {
         // TODO - remove duplication from CLI parsing code
         CommandKey key = CommandKey.of(ctx.getProperty("exec.args"));
         String target = parseTarget(ctx.getProperty("exec.args"));
-        commands.getOrDefault(key, new CommandWithProps(ignored -> {
-            logger.info("Usage: sling command sub-command [target]");
-            logger.info("");
-            logger.info("Available commands:");
-            commands.forEach((k, c) -> logger.info("{} {}: {}", k.command, k.subCommand, c.summary));
-        }, "")).cmd.execute(target);
         try {
-            ctx.getBundle(Constants.SYSTEM_BUNDLE_LOCATION).adapt(Framework.class).stop();
-        } catch (BundleException e) {
+            commands.getOrDefault(key, new CommandWithProps(ignored -> {
+                logger.info("Usage: sling command sub-command [target]");
+                logger.info("");
+                logger.info("Available commands:");
+                commands.forEach((k, c) -> logger.info("{} {}: {}", k.command, k.subCommand, c.summary));
+            }, "")).cmd.execute(target);
+        } catch (Exception e) {
             logger.warn("Failed running command", e);
+        } finally {
+            try {
+                ctx.getBundle(Constants.SYSTEM_BUNDLE_LOCATION).adapt(Framework.class).stop();
+            } catch (BundleException e) {
+                logger.error("Failed shutting down framework, forcing exit", e);
+                System.exit(1);
+            }
         }
     }