aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bdep/bdep.cxx20
-rw-r--r--bdep/common.cli6
-rw-r--r--bdep/help.cxx2
-rw-r--r--bdep/new.cxx18
-rw-r--r--bdep/sync.cxx9
-rw-r--r--bdep/utility.cxx13
-rw-r--r--bdep/utility.hxx12
-rw-r--r--tests/common.testscript24
8 files changed, 82 insertions, 22 deletions
diff --git a/bdep/bdep.cxx b/bdep/bdep.cxx
index c8fe18b..1faac39 100644
--- a/bdep/bdep.cxx
+++ b/bdep/bdep.cxx
@@ -219,15 +219,25 @@ init (const common_options& co,
if (!o.no_default_options ()) // Command line option.
try
{
+ bdep::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 (),
+ 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);
}
@@ -236,10 +246,6 @@ init (const common_options& co,
fail << "unable to load default options files: " << e.first << ": "
<< e.second;
}
- catch (const system_error& e)
- {
- fail << "unable to obtain home directory: " << e;
- }
// Global initializations.
//
diff --git a/bdep/common.cli b/bdep/common.cli
index c08d873..4dd18b0 100644
--- a/bdep/common.cli
+++ b/bdep/common.cli
@@ -213,6 +213,12 @@ namespace bdep
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/bdep/help.cxx b/bdep/help.cxx
index e37c65d..fe64c2a 100644
--- a/bdep/help.cxx
+++ b/bdep/help.cxx
@@ -71,7 +71,7 @@ namespace bdep
return default_options_files {
{path ("bdep.options"), path ("bdep-help.options")},
- nullopt /* start_dir */};
+ nullopt /* start */};
}
help_options
diff --git a/bdep/new.cxx b/bdep/new.cxx
index 160a9ce..3a79486 100644
--- a/bdep/new.cxx
+++ b/bdep/new.cxx
@@ -2148,7 +2148,7 @@ namespace bdep
// Note that we will not validate the command arguments and let cmd_new()
// complain later in case of an error.
//
- optional<dir_path> start_dir;
+ optional<dir_path> start;
auto output_parent_dir = [&o] ()
{
@@ -2157,29 +2157,29 @@ namespace bdep
if (o.package () || o.subdirectory ())
{
- start_dir =
+ start =
o.output_dir_specified () ? output_parent_dir () :
o.directory_specified () ? normalize (o.directory (), "project") :
current_directory ();
// Get the actual project directory.
//
- project_package pp (find_project_package (*start_dir,
+ project_package pp (find_project_package (*start,
true /* ignore_not_found */));
if (!pp.project.empty ())
- start_dir = move (pp.project);
+ start = move (pp.project);
else if (!o.no_checks ())
- start_dir = nullopt; // Let cmd_new() fail.
+ start = nullopt; // Let cmd_new() fail.
}
else // New project.
{
- start_dir = o.output_dir_specified ()
- ? output_parent_dir ()
- : current_directory ();
+ start = o.output_dir_specified ()
+ ? output_parent_dir ()
+ : current_directory ();
}
- default_options_files r {{path ("bdep.options")}, move (start_dir)};
+ default_options_files r {{path ("bdep.options")}, move (start)};
auto add = [&r] (const string& n)
{
diff --git a/bdep/sync.cxx b/bdep/sync.cxx
index 26781eb..7599148 100644
--- a/bdep/sync.cxx
+++ b/bdep/sync.cxx
@@ -870,8 +870,8 @@ namespace bdep
default_options_files r {{path ("bdep.options")}, nullopt};
// Add bdep-sync-implicit.options for an implicit sync and
- // bdep-sync.options otherwise. Omit the search start dir in the former
- // case.
+ // bdep-sync.options otherwise. In the former case try to find a common
+ // start directory using the configuration directories.
//
auto add = [&r] (const string& n)
{
@@ -881,12 +881,14 @@ namespace bdep
if (o.implicit () || o.hook_specified ())
{
add ("sync-implicit");
+
+ r.start = default_options_start (home_directory (), o.config ());
}
else
{
add ("sync");
- r.start_dir = find_project (o);
+ r.start = find_project (o);
}
return r;
@@ -913,6 +915,7 @@ namespace bdep
forbid ("--directory|-d", o.directory_specified ());
forbid ("--implicit", o.implicit ());
forbid ("--hook", o.hook_specified ());
+ forbid ("--config|-c", o.config_specified ());
});
}
}
diff --git a/bdep/utility.cxx b/bdep/utility.cxx
index 148610b..5a547eb 100644
--- a/bdep/utility.cxx
+++ b/bdep/utility.cxx
@@ -95,6 +95,19 @@ namespace bdep
}
}
+ dir_path
+ home_directory ()
+ {
+ try
+ {
+ return dir_path::home_directory ();
+ }
+ catch (const system_error& e)
+ {
+ fail << "unable to obtain home directory: " << e << endf;
+ }
+ }
+
dir_path&
normalize (dir_path& d, const char* what)
{
diff --git a/bdep/utility.hxx b/bdep/utility.hxx
index 7f02b3c..c4cdef5 100644
--- a/bdep/utility.hxx
+++ b/bdep/utility.hxx
@@ -14,10 +14,11 @@
#include <libbutl/ft/lang.hxx>
-#include <libbutl/utility.mxx> // casecmp(), reverse_iterate(), etc
+#include <libbutl/utility.mxx> // casecmp(), reverse_iterate(), etc
#include <libbutl/prompt.mxx>
#include <libbutl/fdstream.mxx>
#include <libbutl/filesystem.mxx>
+#include <libbutl/default-options.mxx>
#include <libbutl/manifest-parser.mxx> // manifest_parser::filter_function
#include <libbutl/manifest-serializer.mxx> // manifest_serializer::filter_function
@@ -67,6 +68,12 @@ namespace bdep
using butl::auto_rmfile;
using butl::auto_rmdir;
+ // <libbutl/default-options.mxx>
+ //
+ using butl::load_default_options;
+ using butl::merge_default_options;
+ using butl::default_options_start;
+
// Empty string and path.
//
extern const string empty_string;
@@ -119,6 +126,9 @@ namespace bdep
dir_path
current_directory ();
+ dir_path
+ home_directory ();
+
// Normalize a directory path. Also make the relative path absolute using
// the current directory.
//
diff --git a/tests/common.testscript b/tests/common.testscript
index 1914625..2340491 100644
--- a/tests/common.testscript
+++ b/tests/common.testscript
@@ -13,7 +13,29 @@
# produced or updated by a command being tested.
#
build = $recall($build.path)
-test.options += --build $build
+
+# Disable loading the user's default options files (that may affect the test
+# commands execution) for bdep, 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
++echo '--no-default-options' >=$options_guard/bdep.options
+
+test.options += --default-options $options_guard \
+--build $build --build-option "--default-options=$options_guard" \
+--bpkg-option "--default-options=$options_guard" \
+--bpkg-option "--build-option=--default-options=$options_guard"
+
+build = $build --default-options $options_guard
+
++cat <<"EOI" >=$options_guard/bdep-sync-implicit.options
+--build-option "--default-options=$options_guard"
+--bpkg-option "--default-options=$options_guard"
+--bpkg-option "--build-option=--default-options=$options_guard"
+EOI
# Check that git version is the minimum supported one or above. The lowest
# common denominator for bdep commands is 2.1.0.