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 <[email protected]> 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); + } } }
