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);
+ }
}
}