diff options
-rw-r--r-- | bpkg/bpkg.cxx | 16 | ||||
-rw-r--r-- | bpkg/cfg-create.cxx | 6 | ||||
-rw-r--r-- | bpkg/common.cli | 6 | ||||
-rw-r--r-- | bpkg/rep-create.cxx | 6 | ||||
-rw-r--r-- | bpkg/rep-info.cxx | 6 | ||||
-rw-r--r-- | bpkg/utility.hxx | 9 | ||||
-rw-r--r-- | tests/common.testscript | 13 |
7 files changed, 47 insertions, 15 deletions
diff --git a/bpkg/bpkg.cxx b/bpkg/bpkg.cxx index 0da8c58..170a7fe 100644 --- a/bpkg/bpkg.cxx +++ b/bpkg/bpkg.cxx @@ -95,7 +95,7 @@ namespace bpkg return default_options_files { {path ("bpkg.options"), path (string ("bpkg-") + cmd + ".options")}, - nullopt /* start_dir */}; + nullopt /* start */}; } // Merge the default options and the command line options. Fail if options @@ -234,15 +234,25 @@ init (const common_options& co, if (!o.no_default_options ()) // Command line option. try { + bpkg::optional<dir_path> extra; + if (o.default_options_specified ()) + extra = o.default_options (); + o = merge_options ( load_default_options<O, cli::argv_file_scanner, cli::unknown_mode> ( nullopt /* sys_dir */, path::home_directory (), + extra, options_files (cmd, o, args), - [&trace, &verbosity] (const path& f, bool remote) + [&trace, &verbosity] (const path& f, bool r, bool o) { if (verbosity () >= 3) - trace << "loading " << (remote ? "remote " : "local ") << f; + { + if (o) + trace << "treating " << f << " as " << (r ? "remote" : "local"); + else + trace << "loading " << (r ? "remote " : "local ") << f; + } }), o); } diff --git a/bpkg/cfg-create.cxx b/bpkg/cfg-create.cxx index 1bc1a57..affc0b0 100644 --- a/bpkg/cfg-create.cxx +++ b/bpkg/cfg-create.cxx @@ -180,18 +180,18 @@ namespace bpkg // Use the configuration parent directory as a start directory. // - optional<dir_path> start_dir; + optional<dir_path> start; // Let cfg_create() complain later for the root directory used as a // configuration directory. // dir_path d (normalize (o.directory (), "configuration")); if (!d.root ()) - start_dir = d.directory (); + start = d.directory (); return default_options_files { {path ("bpkg.options"), path ("bpkg-cfg-create.options")}, - move (start_dir)}; + move (start)}; } cfg_create_options diff --git a/bpkg/common.cli b/bpkg/common.cli index 9b5df37..8af8726 100644 --- a/bpkg/common.cli +++ b/bpkg/common.cli @@ -367,6 +367,12 @@ namespace bpkg to specify more than one options file." } + dir_path --default-options + { + "<dir>", + "The directory to load additional default options files from." + } + bool --no-default-options { "Don't load default options files." diff --git a/bpkg/rep-create.cxx b/bpkg/rep-create.cxx index f0df1c0..98bf7f8 100644 --- a/bpkg/rep-create.cxx +++ b/bpkg/rep-create.cxx @@ -265,7 +265,7 @@ namespace bpkg // Use the repository directory as a start directory. // - optional<dir_path> start_dir; + optional<dir_path> start; // Let rep_create() complain later for invalid repository directory. // @@ -273,13 +273,13 @@ namespace bpkg { dir_path d (!args.empty () ? args[0] : "."); if (!d.empty ()) - start_dir = move (normalize (d, "repository")); + start = move (normalize (d, "repository")); } catch (const invalid_path&) {} return default_options_files { {path ("bpkg.options"), path ("bpkg-rep-create.options")}, - move (start_dir)}; + move (start)}; } rep_create_options diff --git a/bpkg/rep-info.cxx b/bpkg/rep-info.cxx index eeb93fe..086a142 100644 --- a/bpkg/rep-info.cxx +++ b/bpkg/rep-info.cxx @@ -384,7 +384,7 @@ namespace bpkg // If bpkg-rep-info operates in the configuration directory, then use it // as a search start directory. // - optional<dir_path> start_dir; + optional<dir_path> start; // Let rep_info() complain later for invalid configuration directory. // @@ -398,13 +398,13 @@ namespace bpkg d = current_dir; if (!d.empty ()) - start_dir = move (normalize (d, "configuration")); + start = move (normalize (d, "configuration")); } catch (const invalid_path&) {} return default_options_files { {path ("bpkg.options"), path ("bpkg-rep-info.options")}, - move (start_dir)}; + move (start)}; } rep_info_options diff --git a/bpkg/utility.hxx b/bpkg/utility.hxx index 1e82f44..2332587 100644 --- a/bpkg/utility.hxx +++ b/bpkg/utility.hxx @@ -14,9 +14,9 @@ #include <libbutl/ft/lang.hxx> -#include <libbutl/utility.mxx> // casecmp(), reverse_iterate(), etc - +#include <libbutl/utility.mxx> // casecmp(), reverse_iterate(), etc #include <libbutl/filesystem.mxx> +#include <libbutl/default-options.mxx> #include <bpkg/types.hxx> #include <bpkg/version.hxx> @@ -53,6 +53,11 @@ namespace bpkg using butl::auto_rmfile; using butl::auto_rmdir; + // <libbutl/default-options.mxx> + // + using butl::load_default_options; + using butl::merge_default_options; + // Empty string and path. // extern const string empty_string; diff --git a/tests/common.testscript b/tests/common.testscript index 6a7bad2..802b2e5 100644 --- a/tests/common.testscript +++ b/tests/common.testscript @@ -9,7 +9,18 @@ # to one that may or may not be found via PATH). # build = $recall($build.path) -test.options += --build $build + +# Disable loading the user's default options files (that may affect the test +# commands execution) for bpkg and build2. +# +options_guard = $~/.build2 ++mkdir $options_guard + ++echo '--no-default-options' >=$options_guard/b.options ++echo '--no-default-options' >=$options_guard/bpkg.options + +test.options += --default-options $options_guard \ +--build $build --build-option "--default-options=$options_guard" # Helper commands that can be used by tests to prepare the testing environment # or validate an outcome of the command being tested. They are likely to get |