This is an automated email from the ASF dual-hosted git repository.
rombert pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-whiteboard.git
The following commit(s) were added to refs/heads/master by this push:
new 3c88db9 SLING-8339 - CLI hangs when an unhandled exception occurs
3c88db9 is described below
commit 3c88db92a79c90ae4f0973573a1b131b7ce0da49
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/cli/src/main/java/org/apache/sling/cli/impl/Command.java
b/cli/src/main/java/org/apache/sling/cli/impl/Command.java
index 4caeea7..4b015c4 100644
--- a/cli/src/main/java/org/apache/sling/cli/impl/Command.java
+++ b/cli/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/cli/src/main/java/org/apache/sling/cli/impl/CommandProcessor.java
b/cli/src/main/java/org/apache/sling/cli/impl/CommandProcessor.java
index 57e5430..6ca6bca 100644
--- a/cli/src/main/java/org/apache/sling/cli/impl/CommandProcessor.java
+++ b/cli/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);
+ }
}
}