diff --git a/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/OakUpgrade.java b/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/OakUpgrade.java index 4405555..1f46af4 100644 --- a/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/OakUpgrade.java +++ b/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/OakUpgrade.java @@ -41,7 +41,7 @@ public class OakUpgrade { OptionSet options = OptionParserFactory.create().parse(args); try { MigrationCliArguments cliArguments = new MigrationCliArguments(options); - if (cliArguments.hasOption(OptionParserFactory.HELP) || cliArguments.getArguments().isEmpty()) { + if (cliArguments.hasFlag(OptionParserFactory.HELP) || cliArguments.getArguments().isEmpty()) { CliUtils.displayUsage(); return; } diff --git a/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/MigrationCliArguments.java b/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/MigrationCliArguments.java index d98af5a..3ee528d 100644 --- a/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/MigrationCliArguments.java +++ b/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/MigrationCliArguments.java @@ -40,6 +40,19 @@ public final class MigrationCliArguments { return args; } + public boolean hasFlag(String optionName) { + if (options.has(optionName)) { + Object value = options.valueOf(optionName); + if (value == null) { + return true; + } else { + return Boolean.parseBoolean((String) value); + } + } else { + return false; + } + } + public boolean hasOption(String optionName) { return options.has(optionName); } diff --git a/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/MigrationOptions.java b/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/MigrationOptions.java index 48240df..2f688e1 100644 --- a/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/MigrationOptions.java +++ b/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/MigrationOptions.java @@ -90,9 +90,9 @@ public class MigrationOptions { private final Boolean srcExternalBlobs; public MigrationOptions(MigrationCliArguments args) { - this.disableMmap = args.hasOption(OptionParserFactory.DISABLE_MMAP); - this.copyBinaries = args.hasOption(OptionParserFactory.COPY_BINARIES); - if (args.hasOption(OptionParserFactory.CACHE_SIZE)) { + this.disableMmap = args.hasFlag(OptionParserFactory.DISABLE_MMAP); + this.copyBinaries = args.hasFlag(OptionParserFactory.COPY_BINARIES); + if (args.hasFlag(OptionParserFactory.CACHE_SIZE)) { this.cacheSizeInMB = args.getIntOption(OptionParserFactory.CACHE_SIZE); } else { this.cacheSizeInMB = 256; @@ -113,14 +113,14 @@ public class MigrationOptions { this.includePaths = args.getOptionList(OptionParserFactory.INCLUDE_PATHS); this.excludePaths = args.getOptionList(OptionParserFactory.EXCLUDE_PATHS); this.mergePaths = args.getOptionList(OptionParserFactory.MERGE_PATHS); - this.includeIndex = args.hasOption(OptionParserFactory.INCLUDE_INDEX); - this.failOnError = args.hasOption(OptionParserFactory.FAIL_ON_ERROR); - this.earlyShutdown = args.hasOption(OptionParserFactory.EARLY_SHUTDOWN); - this.skipInitialization = args.hasOption(OptionParserFactory.SKIP_INIT); - this.skipNameCheck = args.hasOption(OptionParserFactory.SKIP_NAME_CHECK); - this.ignoreMissingBinaries = args.hasOption(OptionParserFactory.IGNORE_MISSING_BINARIES); - this.verify = args.hasOption(OptionParserFactory.VERIFY); - this.onlyVerify = args.hasOption(OptionParserFactory.ONLY_VERIFY); + this.includeIndex = args.hasFlag(OptionParserFactory.INCLUDE_INDEX); + this.failOnError = args.hasFlag(OptionParserFactory.FAIL_ON_ERROR); + this.earlyShutdown = args.hasFlag(OptionParserFactory.EARLY_SHUTDOWN); + this.skipInitialization = args.hasFlag(OptionParserFactory.SKIP_INIT); + this.skipNameCheck = args.hasFlag(OptionParserFactory.SKIP_NAME_CHECK); + this.ignoreMissingBinaries = args.hasFlag(OptionParserFactory.IGNORE_MISSING_BINARIES); + this.verify = args.hasFlag(OptionParserFactory.VERIFY); + this.onlyVerify = args.hasFlag(OptionParserFactory.ONLY_VERIFY); this.srcUser = args.getOption(OptionParserFactory.SRC_USER); this.srcPassword = args.getOption(OptionParserFactory.SRC_USER); diff --git a/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/OptionParserFactory.java b/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/OptionParserFactory.java index 35bdda3..e31ad7e 100644 --- a/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/OptionParserFactory.java +++ b/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/OptionParserFactory.java @@ -98,7 +98,7 @@ public class OptionParserFactory { } private static void addBlobOptions(OptionParser op) { - op.accepts(COPY_BINARIES, "Copy binary content. Use this to disable use of existing DataStore in new repo"); + op.accepts(COPY_BINARIES, "Copy binary content. Use this to disable use of existing DataStore in new repo").withOptionalArg().ofType(Boolean.class); op.accepts(SRC_FDS, "Datastore directory to be used as a source FileDataStore").withRequiredArg() .ofType(String.class); op.accepts(SRC_FBS, "Datastore directory to be used as a source FileBlobStore").withRequiredArg() diff --git a/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/parser/MigrationOptionsTest.java b/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/parser/MigrationOptionsTest.java new file mode 100644 index 0000000..f0dc632 --- /dev/null +++ b/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/parser/MigrationOptionsTest.java @@ -0,0 +1,25 @@ +package org.apache.jackrabbit.oak.upgrade.cli.parser; + +import joptsimple.OptionSet; +import org.junit.Test; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +public class MigrationOptionsTest { + + public MigrationOptions getOptions(String... args) throws CliArgumentException { + OptionSet options = OptionParserFactory.create().parse(args); + MigrationCliArguments cliArguments = new MigrationCliArguments(options); + return new MigrationOptions(cliArguments); + } + + @Test + public void testFlags() throws CliArgumentException { + assertTrue(getOptions("--copy-binaries").isCopyBinaries()); + assertTrue(getOptions("--copy-binaries=true").isCopyBinaries()); + assertFalse(getOptions().isCopyBinaries()); + assertFalse(getOptions("--copy-binaries=false").isCopyBinaries()); + } + +}