This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new 16b6e9dfbe82 CAMEL-25696: camel-jbang - A boolean option given without
a value is on (#27951)
16b6e9dfbe82 is described below
commit 16b6e9dfbe82939fc0a1131f7b20780570bd5936
Author: Claus Ibsen <[email protected]>
AuthorDate: Fri Oct 16 17:35:49 2026 +0200
CAMEL-25696: camel-jbang - A boolean option given without a value is on
(#27951)
picocli sets a boolean flag to the opposite of its default value, so the
flag of an option that is on by default turned it off: camel export
--maven-wrapper exported no Maven wrapper, camel config set --global wrote
the local configuration, camel cmd receive --show-body hid the body, and
camel kubernetes run --dev --cleanup left the deployment behind.
All 82 boolean options that are on by default, also those whose default
comes from the field (such as --global) or from the environment (run
--logging-color), take arity 0..1 with the fallback value true, as --follow
does since CAMEL-25396: a bare flag is on, --option=false is off, and a
name or file after the flag is not taken as its value. A test in
camel-jbang-core and in the kubernetes and validate plugins walks the
commands and fails for a new option without it.
A test checks the colors option of camel run on run, dev and debug
whatever the environment, as its default is off in CI.
Co-authored-by: Claude Opus 5.5 (1M context) <[email protected]>
---
.../ROOT/pages/camel-4x-upgrade-guide-4_24.adoc | 8 ++
.../camel/dsl/jbang/core/commands/Debug.java | 12 +--
.../camel/dsl/jbang/core/commands/Explain.java | 2 +-
.../dsl/jbang/core/commands/ExportBaseCommand.java | 11 +-
.../camel/dsl/jbang/core/commands/Harden.java | 2 +-
.../jbang/core/commands/MavenResolverMixin.java | 2 +-
.../apache/camel/dsl/jbang/core/commands/Run.java | 11 +-
.../jbang/core/commands/TransformDataWeave.java | 2 +-
.../dsl/jbang/core/commands/TransformRoute.java | 2 +-
.../jbang/core/commands/action/CamelBeanDump.java | 4 +-
.../core/commands/action/CamelBrowseAction.java | 7 +-
.../jbang/core/commands/action/CamelHeapDump.java | 3 +-
.../core/commands/action/CamelHistoryAction.java | 13 +--
.../jbang/core/commands/action/CamelLogAction.java | 5 +-
.../core/commands/action/CamelReceiveAction.java | 9 +-
.../commands/action/CamelRouteDiagramAction.java | 2 +-
.../core/commands/action/CamelRouteDumpAction.java | 2 +-
.../commands/action/CamelRouteTopologyAction.java | 2 +-
.../core/commands/action/CamelSendAction.java | 9 +-
.../core/commands/action/CamelSpanAction.java | 2 +-
.../core/commands/action/CamelStubAction.java | 11 +-
.../core/commands/action/CamelTraceAction.java | 15 +--
.../commands/action/RouteControllerAction.java | 6 +-
.../commands/action/TransformMessageAction.java | 9 +-
.../dsl/jbang/core/commands/config/ConfigGet.java | 3 +-
.../dsl/jbang/core/commands/config/ConfigList.java | 3 +-
.../dsl/jbang/core/commands/config/ConfigSet.java | 3 +-
.../jbang/core/commands/config/ConfigUnset.java | 3 +-
.../dsl/jbang/core/commands/process/ListError.java | 3 +-
.../core/commands/process/ListProperties.java | 2 +-
.../jbang/core/commands/version/VersionGet.java | 3 +-
.../jbang/core/commands/version/VersionList.java | 9 +-
.../jbang/core/commands/version/VersionSet.java | 3 +-
.../jbang/core/commands/BooleanOptionsTest.java | 120 +++++++++++++++++++++
.../core/commands/kubernetes/KubernetesExport.java | 2 +-
.../core/commands/kubernetes/KubernetesRun.java | 8 +-
.../kubernetes/KubernetesBooleanOptionsTest.java | 73 +++++++++++++
.../commands/validate/YamlValidateCommand.java | 2 +-
.../validate/ValidateBooleanOptionsTest.java | 60 +++++++++++
39 files changed, 366 insertions(+), 82 deletions(-)
diff --git
a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_24.adoc
b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_24.adoc
index 0594c881d9fa..02549e8aedc7 100644
--- a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_24.adoc
+++ b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_24.adoc
@@ -466,6 +466,14 @@ or follows, like Enter does.
* A plugin that cannot be loaded ends the command with exit code `1` and the
error, as before, but no longer exits the
JVM while the plugins load, which ended a program that embeds the CLI.
+=== camel-jbang - a boolean option given without a value is on
+
+A boolean option that is on by default is now on when it is given without a
value, like any other boolean option:
+`camel export --maven-wrapper` exports the Maven wrapper, `camel config set
--global key=value` writes the global
+configuration, `camel cmd receive --show-body` shows the body, and `camel
kubernetes run --dev --cleanup` removes the
+deployment when it stops. Such a flag turned the option off before (picocli
sets a flag to the opposite of its default).
+Turn the option off with `=false`, such as `--maven-wrapper=false`, which
works as before.
+
=== camel-jbang - exit codes of config set, dependency list, jolokia and cmd
memory-leak
* `camel jolokia` with a name or pid that matches no running integration, or
more than one, exits with `3`, as
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Debug.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Debug.java
index 5eaae7402c07..d03ef334d49a 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Debug.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Debug.java
@@ -98,7 +98,7 @@ public class Debug extends Run {
description = "File to store the current message body
(will override). This allows for manual inspecting the message later.")
String output;
- @CommandLine.Option(names = { "--stop-on-exit" }, defaultValue = "true",
+ @CommandLine.Option(names = { "--stop-on-exit" }, defaultValue = "true",
arity = "0..1", fallbackValue = "true",
description = "Whether to stop the running Camel on
exit")
boolean stopOnExit = true;
@@ -106,7 +106,7 @@ public class Debug extends Run {
description = "Number of log lines to display on top
of screen")
int logLines = 10;
- @CommandLine.Option(names = { "--timestamp" }, defaultValue = "true",
+ @CommandLine.Option(names = { "--timestamp" }, defaultValue = "true",
arity = "0..1", fallbackValue = "true",
description = "Print timestamp.")
boolean timestamp = true;
@@ -126,19 +126,19 @@ public class Debug extends Run {
description = "Show exchange properties in debug
messages")
boolean showExchangeProperties;
- @CommandLine.Option(names = { "--show-exchange-variables" }, defaultValue
= "true",
+ @CommandLine.Option(names = { "--show-exchange-variables" }, defaultValue
= "true", arity = "0..1", fallbackValue = "true",
description = "Show exchange variables in debug
messages")
boolean showExchangeVariables = true;
- @CommandLine.Option(names = { "--show-headers" }, defaultValue = "true",
+ @CommandLine.Option(names = { "--show-headers" }, defaultValue = "true",
arity = "0..1", fallbackValue = "true",
description = "Show message headers in debug messages")
boolean showHeaders = true;
- @CommandLine.Option(names = { "--show-body" }, defaultValue = "true",
+ @CommandLine.Option(names = { "--show-body" }, defaultValue = "true",
arity = "0..1", fallbackValue = "true",
description = "Show message body in debug messages")
boolean showBody = true;
- @CommandLine.Option(names = { "--show-exception" }, defaultValue = "true",
+ @CommandLine.Option(names = { "--show-exception" }, defaultValue = "true",
arity = "0..1", fallbackValue = "true",
description = "Show exception and stacktrace for
failed messages")
boolean showException = true;
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Explain.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Explain.java
index f984d6688f9b..9fc0e51ea173 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Explain.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Explain.java
@@ -141,7 +141,7 @@ public class Explain extends CamelCommand {
@Option(names = { "--stream" },
description = "Stream the response as it's generated (shows
progress)",
- defaultValue = "true")
+ defaultValue = "true", arity = "0..1", fallbackValue = "true")
boolean stream = true;
public Explain(CamelJBangMain main) {
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java
index 637b941a8391..b69572be99ff 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java
@@ -154,11 +154,12 @@ public abstract class ExportBaseCommand extends
CamelCommand {
description = "Optional location of Maven
settings-security.xml file to decrypt settings.xml")
protected String mavenSettingsSecurity;
- @CommandLine.Option(names = { "--maven-central-enabled" }, defaultValue =
"true",
+ @CommandLine.Option(names = { "--maven-central-enabled" }, defaultValue =
"true", arity = "0..1", fallbackValue = "true",
description = "Whether downloading JARs from Maven
Central repository is enabled")
protected boolean mavenCentralEnabled = true;
- @CommandLine.Option(names = { "--maven-apache-snapshot-enabled" },
defaultValue = "true",
+ @CommandLine.Option(names = { "--maven-apache-snapshot-enabled" },
defaultValue = "true", arity = "0..1",
+ fallbackValue = "true",
description = "Whether downloading JARs from ASF Maven
Snapshot repository is enabled")
protected boolean mavenApacheSnapshotEnabled = true;
@@ -207,7 +208,7 @@ public abstract class ExportBaseCommand extends
CamelCommand {
hidden = true)
protected String quarkusPackageType = "fast-jar";
- @CommandLine.Option(names = { "--maven-wrapper" }, defaultValue = "true",
+ @CommandLine.Option(names = { "--maven-wrapper" }, defaultValue = "true",
arity = "0..1", fallbackValue = "true",
description = "Include Maven Wrapper files in exported
project")
protected boolean mavenWrapper = true;
@@ -215,7 +216,7 @@ public abstract class ExportBaseCommand extends
CamelCommand {
description = "Include Camel Wrapper scripts in
exported project for version pinning")
protected boolean camelWrapper;
- @CommandLine.Option(names = { "--docker" }, defaultValue = "true",
+ @CommandLine.Option(names = { "--docker" }, defaultValue = "true", arity =
"0..1", fallbackValue = "true",
description = "Include Docker files in exported
project")
protected boolean docker = true;
@@ -299,7 +300,7 @@ public abstract class ExportBaseCommand extends
CamelCommand {
description = "Whether to ignore route loading and
compilation errors (use this with care!)")
protected boolean ignoreLoadingError;
- @CommandLine.Option(names = { "--lazy-bean" }, defaultValue = "true",
+ @CommandLine.Option(names = { "--lazy-bean" }, defaultValue = "true",
arity = "0..1", fallbackValue = "true",
description = "Whether to use lazy bean initialization
(can help with complex classloading issues")
protected boolean lazyBean = true;
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Harden.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Harden.java
index 7a27199e3bcb..6cfef2eba744 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Harden.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Harden.java
@@ -190,7 +190,7 @@ public class Harden extends CamelCommand {
@Option(names = { "--stream" },
description = "Stream the response as it's generated (shows
progress)",
- defaultValue = "true")
+ defaultValue = "true", arity = "0..1", fallbackValue = "true")
boolean stream = true;
private final HttpClient httpClient = HttpClient.newBuilder()
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/MavenResolverMixin.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/MavenResolverMixin.java
index ccdacd272bfb..6ff48bd38092 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/MavenResolverMixin.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/MavenResolverMixin.java
@@ -29,7 +29,7 @@ import picocli.CommandLine;
*/
public class MavenResolverMixin implements MavenResolverMixinSpec {
@CommandLine.Option(names = {
- "--download" }, defaultValue = "true",
+ "--download" }, defaultValue = "true", arity = "0..1",
fallbackValue = "true",
description = "Whether to allow automatic downloading
JAR dependencies (over the internet)")
boolean download = true;
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java
index 28a911053fe4..c81ca8ef00ee 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java
@@ -269,11 +269,11 @@ public class Run extends CamelCommand {
description = "Optional location of Maven settings-security.xml
file to decrypt settings.xml")
String mavenSettingsSecurity;
- @Option(names = { "--maven-central-enabled" }, defaultValue = "true",
+ @Option(names = { "--maven-central-enabled" }, defaultValue = "true",
arity = "0..1", fallbackValue = "true",
description = "Whether downloading JARs from Maven Central
repository is enabled")
boolean mavenCentralEnabled = true;
- @Option(names = { "--maven-apache-snapshot-enabled" }, defaultValue =
"true",
+ @Option(names = { "--maven-apache-snapshot-enabled" }, defaultValue =
"true", arity = "0..1", fallbackValue = "true",
description = "Whether downloading JARs from ASF Maven Snapshot
repository is enabled")
boolean mavenApacheSnapshotEnabled = true;
@@ -343,7 +343,7 @@ public class Run extends CamelCommand {
// port, managementPort, console, health, metrics, observe options are in
ServerOptions @ArgGroup
- @Option(names = { "--modeline" }, defaultValue = "true",
+ @Option(names = { "--modeline" }, defaultValue = "true", arity = "0..1",
fallbackValue = "true",
description = "Whether to support JBang style //DEPS to specify
additional dependencies")
boolean modeline = true;
@@ -3636,14 +3636,15 @@ public class Run extends CamelCommand {
}
static class LoggingOptions {
- @Option(names = { "--logging" }, defaultValue = "true", description =
"Can be used to turn off logging")
+ @Option(names = { "--logging" }, defaultValue = "true", arity =
"0..1", fallbackValue = "true",
+ description = "Can be used to turn off logging")
boolean logging = true;
@Option(names = { "--logging-level" }, completionCandidates =
LoggingLevelCompletionCandidates.class,
defaultValue = "info", description = "Logging level
(${COMPLETION-CANDIDATES})")
String loggingLevel;
- @Option(names = { "--logging-color" },
+ @Option(names = { "--logging-color" }, arity = "0..1", fallbackValue =
"true",
description = "Use colored logging. Default is auto-detected
based on NO_COLOR, CI, FORCE_COLOR environment variables and terminal
capabilities")
boolean loggingColor = EnvironmentHelper.isColorEnabled();
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/TransformDataWeave.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/TransformDataWeave.java
index 10a68aab89d7..d1762d7b5835 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/TransformDataWeave.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/TransformDataWeave.java
@@ -49,7 +49,7 @@ public class TransformDataWeave extends CamelCommand {
description = "Inline DataWeave expression to convert")
private String expression;
- @CommandLine.Option(names = { "--include-comments" }, defaultValue =
"true",
+ @CommandLine.Option(names = { "--include-comments" }, defaultValue =
"true", arity = "0..1", fallbackValue = "true",
description = "Include conversion notes as comments in
output")
private boolean includeComments = true;
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/TransformRoute.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/TransformRoute.java
index e903a69a4cb6..402ac2f6e31e 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/TransformRoute.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/TransformRoute.java
@@ -76,7 +76,7 @@ public class TransformRoute extends CamelCommand {
description = "Whether to resolve property
placeholders in the dumped output")
boolean resolvePlaceholders;
- @CommandLine.Option(names = { "--uri-as-parameters" }, defaultValue =
"true",
+ @CommandLine.Option(names = { "--uri-as-parameters" }, defaultValue =
"true", arity = "0..1", fallbackValue = "true",
description = "Whether to expand URIs into separated
key/value parameters (only in use for YAML format)")
boolean uriAsParameters = true;
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelBeanDump.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelBeanDump.java
index cd86eb33721c..0cb0eb048bea 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelBeanDump.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelBeanDump.java
@@ -81,11 +81,11 @@ public class CamelBeanDump extends ActionBaseCommand {
String filter = "all";
@CommandLine.Option(names = { "--properties" },
- description = "Show bean properties", defaultValue =
"true")
+ description = "Show bean properties", defaultValue =
"true", arity = "0..1", fallbackValue = "true")
boolean properties;
@CommandLine.Option(names = { "--nulls" },
- description = "Include null values", defaultValue =
"true")
+ description = "Include null values", defaultValue =
"true", arity = "0..1", fallbackValue = "true")
boolean nulls;
@CommandLine.Option(names = { "--scope" }, completionCandidates =
ScopeCompletionCandidates.class,
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelBrowseAction.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelBrowseAction.java
index f03a9d5e295d..11c8d9e4eed9 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelBrowseAction.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelBrowseAction.java
@@ -96,11 +96,11 @@ public class CamelBrowseAction extends ActionBaseCommand {
description = "Sort by uri, or size", defaultValue =
"uri")
String sort;
- @CommandLine.Option(names = { "--show-headers" }, defaultValue = "true",
+ @CommandLine.Option(names = { "--show-headers" }, defaultValue = "true",
arity = "0..1", fallbackValue = "true",
description = "Show message headers in browsed
messages")
boolean showHeaders = true;
- @CommandLine.Option(names = { "--show-body" }, defaultValue = "true",
+ @CommandLine.Option(names = { "--show-body" }, defaultValue = "true",
arity = "0..1", fallbackValue = "true",
description = "Show message body in browsed messages")
boolean showBody = true;
@@ -112,7 +112,8 @@ public class CamelBrowseAction extends ActionBaseCommand {
description = "Maximum size of the message body to
include in the dump")
int bodyMaxChars;
- @CommandLine.Option(names = { "--logging-color" }, defaultValue = "true",
description = "Use colored logging")
+ @CommandLine.Option(names = { "--logging-color" }, defaultValue = "true",
arity = "0..1", fallbackValue = "true",
+ description = "Use colored logging")
boolean loggingColor = true;
@CommandLine.Option(names = { "--pretty" },
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelHeapDump.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelHeapDump.java
index bd907f5ac4d4..62aa4351b4a1 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelHeapDump.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelHeapDump.java
@@ -45,7 +45,8 @@ public class CamelHeapDump extends ActionBaseCommand {
String dumpName;
@CommandLine.Option(names = { "--live" },
- description = "Whether to dump only live objects",
defaultValue = "true")
+ description = "Whether to dump only live objects",
defaultValue = "true", arity = "0..1",
+ fallbackValue = "true")
boolean live = true;
@CommandLine.Option(names = { "--timeout" }, defaultValue = "60000",
converter = TimeoutConverter.class,
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelHistoryAction.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelHistoryAction.java
index 64fe8b4ca71e..11cf64001c85 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelHistoryAction.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelHistoryAction.java
@@ -104,7 +104,7 @@ public class CamelHistoryAction extends ActionWatchCommand {
description = "Limit Split to a maximum number of
entries to be displayed")
int limitSplit;
- @CommandLine.Option(names = { "--timestamp" }, defaultValue = "true",
+ @CommandLine.Option(names = { "--timestamp" }, defaultValue = "true",
arity = "0..1", fallbackValue = "true",
description = "Print timestamp.")
boolean timestamp = true;
@@ -116,19 +116,19 @@ public class CamelHistoryAction extends
ActionWatchCommand {
description = "Show exchange properties in debug
messages")
boolean showExchangeProperties;
- @CommandLine.Option(names = { "--show-exchange-variables" }, defaultValue
= "true",
+ @CommandLine.Option(names = { "--show-exchange-variables" }, defaultValue
= "true", arity = "0..1", fallbackValue = "true",
description = "Show exchange variables in debug
messages")
boolean showExchangeVariables = true;
- @CommandLine.Option(names = { "--show-headers" }, defaultValue = "true",
+ @CommandLine.Option(names = { "--show-headers" }, defaultValue = "true",
arity = "0..1", fallbackValue = "true",
description = "Show message headers in debug messages")
boolean showHeaders = true;
- @CommandLine.Option(names = { "--show-body" }, defaultValue = "true",
+ @CommandLine.Option(names = { "--show-body" }, defaultValue = "true",
arity = "0..1", fallbackValue = "true",
description = "Show message body in debug messages")
boolean showBody = true;
- @CommandLine.Option(names = { "--show-exception" }, defaultValue = "true",
+ @CommandLine.Option(names = { "--show-exception" }, defaultValue = "true",
arity = "0..1", fallbackValue = "true",
description = "Show exception and stacktrace for
failed messages")
boolean showException = true;
@@ -140,7 +140,8 @@ public class CamelHistoryAction extends ActionWatchCommand {
description = "Output in JSON Format")
boolean jsonOutput;
- @CommandLine.Option(names = { "--logging-color" }, defaultValue = "true",
description = "Use colored logging")
+ @CommandLine.Option(names = { "--logging-color" }, defaultValue = "true",
arity = "0..1", fallbackValue = "true",
+ description = "Use colored logging")
boolean loggingColor = true;
@CommandLine.Option(names = { "--diagram" },
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelLogAction.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelLogAction.java
index 8ca3dfa5379e..c93497d259fb 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelLogAction.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelLogAction.java
@@ -79,10 +79,11 @@ public class CamelLogAction extends ActionBaseCommand {
@CommandLine.Parameters(description = "Name or pid of running Camel
integration. (default selects all)", arity = "0..1")
String name = "*";
- @CommandLine.Option(names = { "--logging-color" }, defaultValue = "true",
description = "Use colored logging")
+ @CommandLine.Option(names = { "--logging-color" }, defaultValue = "true",
arity = "0..1", fallbackValue = "true",
+ description = "Use colored logging")
boolean loggingColor = true;
- @CommandLine.Option(names = { "--timestamp" }, defaultValue = "true",
+ @CommandLine.Option(names = { "--timestamp" }, defaultValue = "true",
arity = "0..1", fallbackValue = "true",
description = "Print timestamp.")
boolean timestamp = true;
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelReceiveAction.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelReceiveAction.java
index ae12a20e2efc..398aecafd8b0 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelReceiveAction.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelReceiveAction.java
@@ -183,11 +183,11 @@ public class CamelReceiveAction extends ActionBaseCommand
{
description = "Show exchange variables in received
messages")
boolean showExchangeVariables;
- @CommandLine.Option(names = { "--show-headers" }, defaultValue = "true",
+ @CommandLine.Option(names = { "--show-headers" }, defaultValue = "true",
arity = "0..1", fallbackValue = "true",
description = "Show message headers in received
messages")
boolean showHeaders = true;
- @CommandLine.Option(names = { "--show-body" }, defaultValue = "true",
+ @CommandLine.Option(names = { "--show-body" }, defaultValue = "true",
arity = "0..1", fallbackValue = "true",
description = "Show message body in received messages")
boolean showBody = true;
@@ -195,10 +195,11 @@ public class CamelReceiveAction extends ActionBaseCommand
{
description = "Show only message body in received
messages")
boolean onlyBody;
- @CommandLine.Option(names = { "--logging-color" }, defaultValue = "true",
description = "Use colored logging")
+ @CommandLine.Option(names = { "--logging-color" }, defaultValue = "true",
arity = "0..1", fallbackValue = "true",
+ description = "Use colored logging")
boolean loggingColor = true;
- @CommandLine.Option(names = { "--compact" }, defaultValue = "true",
+ @CommandLine.Option(names = { "--compact" }, defaultValue = "true", arity
= "0..1", fallbackValue = "true",
description = "Compact output (no empty line
separating messages)")
boolean compact = true;
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelRouteDiagramAction.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelRouteDiagramAction.java
index 47ee6f8bb047..7065cfc43adc 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelRouteDiagramAction.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelRouteDiagramAction.java
@@ -119,7 +119,7 @@ public class CamelRouteDiagramAction extends
ActionWatchCommand {
defaultValue = "both")
String nodeLabel;
- @CommandLine.Option(names = { "--metric" }, defaultValue = "true",
+ @CommandLine.Option(names = { "--metric" }, defaultValue = "true", arity =
"0..1", fallbackValue = "true",
description = "Whether to include live metrics (only
possible for running Camel application)")
boolean metric;
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelRouteDumpAction.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelRouteDumpAction.java
index 794511e2103c..5ef366a93e9b 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelRouteDumpAction.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelRouteDumpAction.java
@@ -80,7 +80,7 @@ public class CamelRouteDumpAction extends ActionBaseCommand {
@CommandLine.Option(names = { "--uri-as-parameters" },
description = "Whether to expand URIs into separated
key/value parameters (only in use for YAML format)",
- defaultValue = "true")
+ defaultValue = "true", arity = "0..1", fallbackValue =
"true")
boolean uriAsParameters;
@CommandLine.Option(names = { "--filter" },
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelRouteTopologyAction.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelRouteTopologyAction.java
index 9dd91f611703..53875c0fe67f 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelRouteTopologyAction.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelRouteTopologyAction.java
@@ -97,7 +97,7 @@ public class CamelRouteTopologyAction extends
ActionBaseCommand {
description = "Prefer route description over route id
in node labels")
boolean description;
- @CommandLine.Option(names = { "--metric" }, defaultValue = "true",
+ @CommandLine.Option(names = { "--metric" }, defaultValue = "true", arity =
"0..1", fallbackValue = "true",
description = "Whether to include live metrics (only
possible for a running Camel application)")
boolean metric;
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelSendAction.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelSendAction.java
index c45c29c169bd..ee39a8323030 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelSendAction.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelSendAction.java
@@ -116,15 +116,15 @@ public class CamelSendAction extends ActionBaseCommand {
description = "Show exchange variables from response
message (InOut)")
boolean showExchangeVariables;
- @CommandLine.Option(names = { "--show-headers" }, defaultValue = "true",
+ @CommandLine.Option(names = { "--show-headers" }, defaultValue = "true",
arity = "0..1", fallbackValue = "true",
description = "Show message headers from response
message (InOut)")
boolean showHeaders = true;
- @CommandLine.Option(names = { "--show-body" }, defaultValue = "true",
+ @CommandLine.Option(names = { "--show-body" }, defaultValue = "true",
arity = "0..1", fallbackValue = "true",
description = "Show message body from response message
(InOut)")
boolean showBody = true;
- @CommandLine.Option(names = { "--show-exception" }, defaultValue = "true",
+ @CommandLine.Option(names = { "--show-exception" }, defaultValue = "true",
arity = "0..1", fallbackValue = "true",
description = "Show exception and stacktrace for
failed messages")
boolean showException = true;
@@ -132,7 +132,8 @@ public class CamelSendAction extends ActionBaseCommand {
description = "Pretty print response message body
(InOut) when using JSon or XML format")
boolean pretty;
- @CommandLine.Option(names = { "--logging-color" }, defaultValue = "true",
description = "Use colored logging")
+ @CommandLine.Option(names = { "--logging-color" }, defaultValue = "true",
arity = "0..1", fallbackValue = "true",
+ description = "Use colored logging")
boolean loggingColor = true;
@CommandLine.Option(names = { "--infra" },
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelSpanAction.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelSpanAction.java
index 83657a509724..7e337eeb3152 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelSpanAction.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelSpanAction.java
@@ -93,7 +93,7 @@ public class CamelSpanAction extends ActionBaseCommand {
description = "Show flat list of individual spans
instead of grouped traces")
boolean flat;
- @CommandLine.Option(names = { "--logging-color" }, defaultValue = "true",
+ @CommandLine.Option(names = { "--logging-color" }, defaultValue = "true",
arity = "0..1", fallbackValue = "true",
description = "Use colored logging")
boolean loggingColor = true;
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelStubAction.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelStubAction.java
index addf88d3f59d..3f5d53a4bcda 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelStubAction.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelStubAction.java
@@ -60,7 +60,7 @@ public class CamelStubAction extends ActionWatchCommand {
description = "Whether to browse messages queued in
the stub endpoints")
boolean browse;
- @CommandLine.Option(names = { "--top" }, defaultValue = "true",
+ @CommandLine.Option(names = { "--top" }, defaultValue = "true", arity =
"0..1", fallbackValue = "true",
description = "Whether to browse top (latest) messages
queued in the stub endpoints")
boolean top = true;
@@ -77,15 +77,15 @@ public class CamelStubAction extends ActionWatchCommand {
arity = "0..*")
String[] grep;
- @CommandLine.Option(names = { "--show-headers" }, defaultValue = "true",
+ @CommandLine.Option(names = { "--show-headers" }, defaultValue = "true",
arity = "0..1", fallbackValue = "true",
description = "Show message headers in traced
messages")
boolean showHeaders = true;
- @CommandLine.Option(names = { "--show-body" }, defaultValue = "true",
+ @CommandLine.Option(names = { "--show-body" }, defaultValue = "true",
arity = "0..1", fallbackValue = "true",
description = "Show message body in traced messages")
boolean showBody = true;
- @CommandLine.Option(names = { "--compact" }, defaultValue = "true",
+ @CommandLine.Option(names = { "--compact" }, defaultValue = "true", arity
= "0..1", fallbackValue = "true",
description = "Compact output (no empty line
separating browsed messages)")
boolean compact = true;
@@ -97,7 +97,8 @@ public class CamelStubAction extends ActionWatchCommand {
description = "Pretty print message body when using
JSon or XML format")
boolean pretty;
- @CommandLine.Option(names = { "--logging-color" }, defaultValue = "true",
description = "Use colored logging")
+ @CommandLine.Option(names = { "--logging-color" }, defaultValue = "true",
arity = "0..1", fallbackValue = "true",
+ description = "Use colored logging")
boolean loggingColor = true;
@CommandLine.Option(names = { "--json" }, description = "Output in JSON
Format")
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelTraceAction.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelTraceAction.java
index 40f479aae071..200c02a14c81 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelTraceAction.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelTraceAction.java
@@ -113,7 +113,7 @@ public class CamelTraceAction extends ActionBaseCommand {
@CommandLine.Mixin
ActionTimeoutMixin timeoutOption;
- @CommandLine.Option(names = { "--timestamp" }, defaultValue = "true",
+ @CommandLine.Option(names = { "--timestamp" }, defaultValue = "true",
arity = "0..1", fallbackValue = "true",
description = "Print timestamp.")
boolean timestamp = true;
@@ -161,26 +161,27 @@ public class CamelTraceAction extends ActionBaseCommand {
description = "Show exchange properties in traced
messages")
boolean showExchangeProperties;
- @CommandLine.Option(names = { "--show-exchange-variables" }, defaultValue
= "true",
+ @CommandLine.Option(names = { "--show-exchange-variables" }, defaultValue
= "true", arity = "0..1", fallbackValue = "true",
description = "Show exchange variables in traced
messages")
boolean showExchangeVariables = true;
- @CommandLine.Option(names = { "--show-headers" }, defaultValue = "true",
+ @CommandLine.Option(names = { "--show-headers" }, defaultValue = "true",
arity = "0..1", fallbackValue = "true",
description = "Show message headers in traced
messages")
boolean showHeaders = true;
- @CommandLine.Option(names = { "--show-body" }, defaultValue = "true",
+ @CommandLine.Option(names = { "--show-body" }, defaultValue = "true",
arity = "0..1", fallbackValue = "true",
description = "Show message body in traced messages")
boolean showBody = true;
- @CommandLine.Option(names = { "--show-exception" }, defaultValue = "true",
+ @CommandLine.Option(names = { "--show-exception" }, defaultValue = "true",
arity = "0..1", fallbackValue = "true",
description = "Show exception and stacktrace for
failed messages")
boolean showException = true;
- @CommandLine.Option(names = { "--logging-color" }, defaultValue = "true",
description = "Use colored logging")
+ @CommandLine.Option(names = { "--logging-color" }, defaultValue = "true",
arity = "0..1", fallbackValue = "true",
+ description = "Use colored logging")
boolean loggingColor = true;
- @CommandLine.Option(names = { "--compact" }, defaultValue = "true",
+ @CommandLine.Option(names = { "--compact" }, defaultValue = "true", arity
= "0..1", fallbackValue = "true",
description = "Compact output (no empty line
separating traced messages)")
boolean compact = true;
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/RouteControllerAction.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/RouteControllerAction.java
index 6793f09ffde0..2b485d82def6 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/RouteControllerAction.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/RouteControllerAction.java
@@ -66,11 +66,13 @@ public class RouteControllerAction extends
ActionWatchCommand {
String sort;
@CommandLine.Option(names = { "--header" },
- description = "Include controller configuration
details", defaultValue = "true")
+ description = "Include controller configuration
details", defaultValue = "true", arity = "0..1",
+ fallbackValue = "true")
boolean header;
@CommandLine.Option(names = { "--trace" },
- description = "Include stack-traces in error
messages", defaultValue = "true")
+ description = "Include stack-traces in error
messages", defaultValue = "true", arity = "0..1",
+ fallbackValue = "true")
boolean trace;
@CommandLine.Option(names = { "--depth" },
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/TransformMessageAction.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/TransformMessageAction.java
index 6d82094ea37b..bee1c4036ddd 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/TransformMessageAction.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/TransformMessageAction.java
@@ -100,15 +100,15 @@ public class TransformMessageAction extends
ActionWatchCommand {
description = "Show exchange properties from the
output message")
boolean showExchangeProperties;
- @CommandLine.Option(names = { "--show-headers" }, defaultValue = "true",
+ @CommandLine.Option(names = { "--show-headers" }, defaultValue = "true",
arity = "0..1", fallbackValue = "true",
description = "Show message headers from the output
message")
boolean showHeaders = true;
- @CommandLine.Option(names = { "--show-body" }, defaultValue = "true",
+ @CommandLine.Option(names = { "--show-body" }, defaultValue = "true",
arity = "0..1", fallbackValue = "true",
description = "Show message body from the output
message")
boolean showBody = true;
- @CommandLine.Option(names = { "--show-exception" }, defaultValue = "true",
+ @CommandLine.Option(names = { "--show-exception" }, defaultValue = "true",
arity = "0..1", fallbackValue = "true",
description = "Show exception and stacktrace for
failed transformation")
boolean showException = true;
@@ -116,7 +116,8 @@ public class TransformMessageAction extends
ActionWatchCommand {
description = "Timeout waiting for message to be
transformed, in millis or as a duration such as 30s")
long timeout = 20000;
- @CommandLine.Option(names = { "--logging-color" }, defaultValue = "true",
description = "Use colored logging")
+ @CommandLine.Option(names = { "--logging-color" }, defaultValue = "true",
arity = "0..1", fallbackValue = "true",
+ description = "Use colored logging")
boolean loggingColor = true;
@CommandLine.Option(names = { "--pretty" },
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/config/ConfigGet.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/config/ConfigGet.java
index bedd9ab99f38..f25e7d71aea0 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/config/ConfigGet.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/config/ConfigGet.java
@@ -38,7 +38,8 @@ public class ConfigGet extends CamelCommand {
@CommandLine.Parameters(description = "Configuration key", arity = "1")
String key;
- @CommandLine.Option(names = { "--global" }, description = "Use global or
local configuration")
+ @CommandLine.Option(names = { "--global" }, arity = "0..1", fallbackValue
= "true",
+ description = "Use global or local configuration")
boolean global = true;
@CommandLine.Option(names = { "--json" }, description = "Output in JSON
Format")
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/config/ConfigList.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/config/ConfigList.java
index 1a42ad445bd1..b9530a234afd 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/config/ConfigList.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/config/ConfigList.java
@@ -34,7 +34,8 @@ import picocli.CommandLine;
" camel config list --json" })
public class ConfigList extends CamelCommand {
- @CommandLine.Option(names = { "--global" }, description = "Use global or
local configuration")
+ @CommandLine.Option(names = { "--global" }, arity = "0..1", fallbackValue
= "true",
+ description = "Use global or local configuration")
boolean global = true;
@CommandLine.Option(names = { "--json" },
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/config/ConfigSet.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/config/ConfigSet.java
index 2feb0e57693d..378b8a805038 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/config/ConfigSet.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/config/ConfigSet.java
@@ -36,7 +36,8 @@ public class ConfigSet extends CamelCommand {
@CommandLine.Parameters(description = "Configuration parameter (ex.
key=value)", arity = "1")
String configuration;
- @CommandLine.Option(names = { "--global" }, description = "Use global or
local configuration")
+ @CommandLine.Option(names = { "--global" }, arity = "0..1", fallbackValue
= "true",
+ description = "Use global or local configuration")
boolean global = true;
public ConfigSet(CamelJBangMain main) {
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/config/ConfigUnset.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/config/ConfigUnset.java
index 2721897c1606..f91627932b6f 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/config/ConfigUnset.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/config/ConfigUnset.java
@@ -31,7 +31,8 @@ public class ConfigUnset extends CamelCommand {
@CommandLine.Parameters(description = "Configuration key", arity = "1")
String key;
- @CommandLine.Option(names = { "--global" }, description = "Use global or
local configurations")
+ @CommandLine.Option(names = { "--global" }, arity = "0..1", fallbackValue
= "true",
+ description = "Use global or local configurations")
boolean global = true;
public ConfigUnset(CamelJBangMain main) {
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListError.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListError.java
index b53a23e324bc..749fd173b935 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListError.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListError.java
@@ -91,7 +91,8 @@ public class ListError extends ProcessWatchCommand {
description = "Comma-separated detail sections to
show: body, headers, properties, variables, history, stackTrace, or 'all' for
all sections")
String show;
- @CommandLine.Option(names = { "--logging-color" }, defaultValue = "true",
description = "Use colored logging")
+ @CommandLine.Option(names = { "--logging-color" }, defaultValue = "true",
arity = "0..1", fallbackValue = "true",
+ description = "Use colored logging")
boolean loggingColor = true;
@CommandLine.Option(names = { "--detail" },
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListProperties.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListProperties.java
index b3e35cf47570..185bfa82efe2 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListProperties.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListProperties.java
@@ -74,7 +74,7 @@ public class ListProperties extends ProcessWatchCommand {
@CommandLine.Option(names = { "--mask" },
description = "Whether to mask configuration values to
avoid printing sensitive information such as password or access keys",
- defaultValue = "true")
+ defaultValue = "true", arity = "0..1", fallbackValue =
"true")
boolean mask = true;
public ListProperties(CamelJBangMain main) {
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/version/VersionGet.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/version/VersionGet.java
index b7d95d56885a..ad7a1d0d0331 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/version/VersionGet.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/version/VersionGet.java
@@ -31,7 +31,8 @@ import picocli.CommandLine;
" camel version get" })
public class VersionGet extends CamelCommand {
- @CommandLine.Option(names = { "--global" }, description = "Use global or
local configuration")
+ @CommandLine.Option(names = { "--global" }, arity = "0..1", fallbackValue
= "true",
+ description = "Use global or local configuration")
boolean global = true;
public VersionGet(CamelJBangMain main) {
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/version/VersionList.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/version/VersionList.java
index d461580807fb..36a8c5432ac6 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/version/VersionList.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/version/VersionList.java
@@ -129,16 +129,19 @@ public class VersionList extends CamelCommand {
@CommandLine.Option(names = { "--lts" }, description = "Only show LTS
supported releases", defaultValue = "false")
public boolean lts;
- @CommandLine.Option(names = { "--eol" }, description = "Include releases
that are end-of-life", defaultValue = "true")
+ @CommandLine.Option(names = { "--eol" }, description = "Include releases
that are end-of-life", defaultValue = "true",
+ arity = "0..1", fallbackValue = "true")
public boolean eol = true;
- @CommandLine.Option(names = { "--patch" }, description = "Whether to
include patch releases (x.y.z)", defaultValue = "true")
+ @CommandLine.Option(names = { "--patch" }, description = "Whether to
include patch releases (x.y.z)", defaultValue = "true",
+ arity = "0..1", fallbackValue = "true")
public boolean patch = true;
@CommandLine.Option(names = { "--rc" }, description = "Include also
milestone or RC releases", defaultValue = "false")
public boolean rc;
- @CommandLine.Option(names = { "--days" }, description = "Whether to
include days since release", defaultValue = "true")
+ @CommandLine.Option(names = { "--days" }, description = "Whether to
include days since release", defaultValue = "true",
+ arity = "0..1", fallbackValue = "true")
public boolean days;
@CommandLine.Option(names = { "--date-format" }, description = "The format
to show the date (such as dd-MM-yyyy)",
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/version/VersionSet.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/version/VersionSet.java
index a6c2833004b4..ef2ab9b453c5 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/version/VersionSet.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/version/VersionSet.java
@@ -49,7 +49,8 @@ public class VersionSet extends CamelCommand {
@CommandLine.Option(names = { "--reset" }, description = "Reset by
removing any custom version settings")
boolean reset;
- @CommandLine.Option(names = { "--global" }, description = "Use global or
local configuration")
+ @CommandLine.Option(names = { "--global" }, arity = "0..1", fallbackValue
= "true",
+ description = "Use global or local configuration")
boolean global = true;
public VersionSet(CamelJBangMain main) {
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/BooleanOptionsTest.java
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/BooleanOptionsTest.java
new file mode 100644
index 000000000000..0c35373e6576
--- /dev/null
+++
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/BooleanOptionsTest.java
@@ -0,0 +1,120 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.dsl.jbang.core.commands;
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import picocli.CommandLine;
+import picocli.CommandLine.Model.CommandSpec;
+import picocli.CommandLine.Model.OptionSpec;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * A boolean option given without a value is on. picocli sets a flag to the
opposite of its default, so an option that
+ * is on by default needs <tt>arity = "0..1", fallbackValue = "true"</tt>:
otherwise <tt>--maven-wrapper</tt> would turn
+ * the Maven wrapper off.
+ */
+class BooleanOptionsTest extends CamelCommandBaseTestSupport {
+
+ private CommandLine commandLine;
+
+ @BeforeEach
+ void commandLine() {
+ StringWriter help = new StringWriter();
+ CamelJBangMain main = new CamelJBangMain() {
+ @Override
+ public void quit(int exitCode) {
+ // in the test
+ }
+
+ @Override
+ public void postAddCommands(CommandLine commandLine, String[]
args) {
+ commandLine.setOut(new PrintWriter(help));
+ BooleanOptionsTest.this.commandLine = commandLine;
+ }
+ }.withPrinter(printer);
+ main.setDiscoverPlugins(false);
+ main.execute("--help");
+ }
+
+ @Test
+ void everyOptionThatIsOnByDefaultIsOnWhenGivenWithoutValue() {
+ List<String> wrong = new ArrayList<>();
+ check(commandLine, wrong);
+
+ assertThat(wrong).as("boolean options that are on by default, without
arity = \"0..1\", fallbackValue = \"true\"")
+ .isEmpty();
+ }
+
+ @Test
+ void optionThatIsOnByDefaultDependingOnTheEnvironment() {
+ // the colors of camel run are on in a terminal with colors and off in
CI, so the check of the defaults above
+ // sees this option only where its default is on
+ for (String command : List.of("run", "dev", "debug")) {
+ OptionSpec option =
commandLine.getSubcommands().get(command).getCommandSpec().findOption("--logging-color");
+ assertThat(option.arity().min()).as(command).isZero();
+ assertThat(option.fallbackValue()).as(command).isEqualTo("true");
+ }
+ }
+
+ @Test
+ void flagWithoutValue() {
+ assertThat(option("--maven-wrapper", "export",
"--maven-wrapper")).isEqualTo(true);
+ assertThat(option("--maven-wrapper", "export",
"--maven-wrapper=false")).isEqualTo(false);
+ assertThat(option("--maven-wrapper", "export")).isEqualTo(true);
+
+ // the local configuration is written only with --global=false
+ assertThat(option("--global", "config", "set", "--global",
"foo=bar")).isEqualTo(true);
+ assertThat(option("--global", "config", "set", "--global=false",
"foo=bar")).isEqualTo(false);
+
+ // the name after the flag is not taken as its value
+ CommandSpec log = parse("log", "--timestamp", "orders");
+ assertThat(log.findOption("--timestamp").<Boolean>
getValue()).isTrue();
+ assertThat(log.positionalParameters().get(0).<String>
getValue()).isEqualTo("orders");
+ }
+
+ // the value of the option of the command, once the command line is parsed
+ private Object option(String name, String... args) {
+ return parse(args).findOption(name).getValue();
+ }
+
+ private CommandSpec parse(String... args) {
+ CommandLine.ParseResult result = commandLine.parseArgs(args);
+ while (result.hasSubcommand()) {
+ result = result.subcommand();
+ }
+ return result.commandSpec();
+ }
+
+ private static void check(CommandLine commandLine, List<String> wrong) {
+ CommandSpec spec = commandLine.getCommandSpec();
+ for (OptionSpec option : spec.options()) {
+ boolean flag = option.type() == boolean.class || option.type() ==
Boolean.class;
+ boolean onByDefault = "true".equals(option.defaultValue()) ||
Boolean.TRUE.equals(option.initialValue());
+ if (flag && onByDefault && !(option.arity().min() == 0 &&
"true".equals(option.fallbackValue()))) {
+ wrong.add(spec.qualifiedName(" ") + " " +
option.longestName());
+ }
+ }
+ commandLine.getSubcommands().values().forEach(sub -> check(sub,
wrong));
+ }
+}
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesExport.java
b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesExport.java
index 89f027806e8c..4440133deeef 100644
---
a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesExport.java
+++
b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesExport.java
@@ -114,7 +114,7 @@ public class KubernetesExport extends Export {
description = "The image builder used to build the
container image (e.g. docker, jib, s2i).")
protected String imageBuilder = "jib";
- @CommandLine.Option(names = { "--image-push" }, defaultValue = "true",
+ @CommandLine.Option(names = { "--image-push" }, defaultValue = "true",
arity = "0..1", fallbackValue = "true",
description = "Whether to push the container image to
a given image registry.")
protected boolean imagePush = true;
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesRun.java
b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesRun.java
index 2ef670883a52..a387fa9ebf13 100644
---
a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesRun.java
+++
b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesRun.java
@@ -137,7 +137,7 @@ public class KubernetesRun extends KubernetesBaseCommand {
boolean verbose;
@CommandLine.Option(names = { "--cleanup" },
- defaultValue = "true",
+ defaultValue = "true", arity = "0..1", fallbackValue =
"true",
description = "Automatically removes deployment when
process is stopped. Only in combination with --dev, --reload option.")
boolean cleanup = true;
@@ -171,7 +171,7 @@ public class KubernetesRun extends KubernetesBaseCommand {
description = "The target cluster type
(${COMPLETION-CANDIDATES}). Special configurations may be applied to different
cluster types such as Kind or Minikube.")
String clusterType;
- @CommandLine.Option(names = { "--image-build" }, defaultValue = "true",
+ @CommandLine.Option(names = { "--image-build" }, defaultValue = "true",
arity = "0..1", fallbackValue = "true",
description = "Whether to build container image as
part of the run.")
boolean imageBuild = true;
@@ -232,11 +232,11 @@ public class KubernetesRun extends KubernetesBaseCommand {
description = "Optional location of Maven
settings-security.xml file to decrypt settings.xml")
String mavenSettingsSecurity;
- @CommandLine.Option(names = { "--maven-central-enabled" },
+ @CommandLine.Option(names = { "--maven-central-enabled" }, arity = "0..1",
fallbackValue = "true",
description = "Whether downloading JARs from Maven
Central repository is enabled")
boolean mavenCentralEnabled = true;
- @CommandLine.Option(names = { "--maven-apache-snapshot-enabled" },
+ @CommandLine.Option(names = { "--maven-apache-snapshot-enabled" }, arity =
"0..1", fallbackValue = "true",
description = "Whether downloading JARs from ASF Maven
Snapshot repository is enabled")
boolean mavenApacheSnapshotEnabled = true;
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/test/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesBooleanOptionsTest.java
b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/test/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesBooleanOptionsTest.java
new file mode 100644
index 000000000000..a8c40fd50501
--- /dev/null
+++
b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/test/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesBooleanOptionsTest.java
@@ -0,0 +1,73 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.dsl.jbang.core.commands.kubernetes;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+import picocli.CommandLine;
+import picocli.CommandLine.Model.CommandSpec;
+import picocli.CommandLine.Model.OptionSpec;
+
+/**
+ * A boolean option given without a value is on, also for an option that is on
by default: <tt>camel kubernetes run
+ * --dev --cleanup</tt> removes the deployment when it stops.
+ */
+class KubernetesBooleanOptionsTest {
+
+ @Test
+ void everyOptionThatIsOnByDefaultIsOnWhenGivenWithoutValue() {
+ CamelJBangMain main = new CamelJBangMain();
+ CommandLine commandLine = new CommandLine(main);
+ new KubernetesPlugin().customize(commandLine, main);
+
+ List<String> wrong = new ArrayList<>();
+ check(commandLine, wrong);
+
+ Assertions.assertEquals(List.of(), wrong,
+ "boolean options that are on by default, without arity =
\"0..1\", fallbackValue = \"true\"");
+ }
+
+ @Test
+ void cleanupWithoutValue() {
+ CamelJBangMain main = new CamelJBangMain();
+ CommandLine commandLine = new CommandLine(main);
+ new KubernetesPlugin().customize(commandLine, main);
+
+ CommandLine.ParseResult result = commandLine.parseArgs("kubernetes",
"run", "--dev", "--cleanup", "route.yaml");
+ CommandSpec run = result.subcommand().subcommand().commandSpec();
+
+ Assertions.assertEquals(Boolean.TRUE,
run.findOption("--cleanup").getValue());
+ // the file after the flag is not taken as its value
+ Assertions.assertEquals(List.of("route.yaml"), ((KubernetesRun)
run.userObject()).files);
+ }
+
+ private static void check(CommandLine commandLine, List<String> wrong) {
+ CommandSpec spec = commandLine.getCommandSpec();
+ for (OptionSpec option : spec.options()) {
+ boolean flag = option.type() == boolean.class || option.type() ==
Boolean.class;
+ boolean onByDefault = "true".equals(option.defaultValue()) ||
Boolean.TRUE.equals(option.initialValue());
+ if (flag && onByDefault && !(option.arity().min() == 0 &&
"true".equals(option.fallbackValue()))) {
+ wrong.add(spec.qualifiedName(" ") + " " +
option.longestName());
+ }
+ }
+ commandLine.getSubcommands().values().forEach(sub -> check(sub,
wrong));
+ }
+}
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-validate/src/main/java/org/apache/camel/dsl/jbang/core/commands/validate/YamlValidateCommand.java
b/dsl/camel-jbang/camel-jbang-plugin-validate/src/main/java/org/apache/camel/dsl/jbang/core/commands/validate/YamlValidateCommand.java
index 84ec7c2cd711..94fbf7de378b 100644
---
a/dsl/camel-jbang/camel-jbang-plugin-validate/src/main/java/org/apache/camel/dsl/jbang/core/commands/validate/YamlValidateCommand.java
+++
b/dsl/camel-jbang/camel-jbang-plugin-validate/src/main/java/org/apache/camel/dsl/jbang/core/commands/validate/YamlValidateCommand.java
@@ -49,7 +49,7 @@ public class YamlValidateCommand extends CamelCommand {
+ " implicit expressions) with the
canonical form to write")
boolean canonical;
- @CommandLine.Option(names = { "--catalog" }, defaultValue = "true",
+ @CommandLine.Option(names = { "--catalog" }, defaultValue = "true", arity
= "0..1", fallbackValue = "true",
description = "Also check endpoint URIs and simple
expressions against the Camel catalog"
+ " (use --catalog=false for the schema
only)")
boolean catalog = true;
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-validate/src/test/java/org/apache/camel/dsl/jbang/core/commands/validate/ValidateBooleanOptionsTest.java
b/dsl/camel-jbang/camel-jbang-plugin-validate/src/test/java/org/apache/camel/dsl/jbang/core/commands/validate/ValidateBooleanOptionsTest.java
new file mode 100644
index 000000000000..f82b3b90e988
--- /dev/null
+++
b/dsl/camel-jbang/camel-jbang-plugin-validate/src/test/java/org/apache/camel/dsl/jbang/core/commands/validate/ValidateBooleanOptionsTest.java
@@ -0,0 +1,60 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.dsl.jbang.core.commands.validate;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain;
+import org.junit.jupiter.api.Test;
+import picocli.CommandLine;
+import picocli.CommandLine.Model.CommandSpec;
+import picocli.CommandLine.Model.OptionSpec;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * A boolean option given without a value is on, also for an option that is on
by default, such as <tt>camel validate
+ * yaml --catalog</tt>.
+ */
+class ValidateBooleanOptionsTest {
+
+ @Test
+ void everyOptionThatIsOnByDefaultIsOnWhenGivenWithoutValue() {
+ CamelJBangMain main = new CamelJBangMain();
+ CommandLine commandLine = new CommandLine(main);
+ new ValidatePlugin().customize(commandLine, main);
+
+ List<String> wrong = new ArrayList<>();
+ check(commandLine, wrong);
+
+ assertThat(wrong).as("boolean options that are on by default, without
arity = \"0..1\", fallbackValue = \"true\"")
+ .isEmpty();
+ }
+
+ private static void check(CommandLine commandLine, List<String> wrong) {
+ CommandSpec spec = commandLine.getCommandSpec();
+ for (OptionSpec option : spec.options()) {
+ boolean flag = option.type() == boolean.class || option.type() ==
Boolean.class;
+ boolean onByDefault = "true".equals(option.defaultValue()) ||
Boolean.TRUE.equals(option.initialValue());
+ if (flag && onByDefault && !(option.arity().min() == 0 &&
"true".equals(option.fallbackValue()))) {
+ wrong.add(spec.qualifiedName(" ") + " " +
option.longestName());
+ }
+ }
+ commandLine.getSubcommands().values().forEach(sub -> check(sub,
wrong));
+ }
+}