diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2021-12-13 12:01:21 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2021-12-13 12:01:21 +0200 |
commit | 151c64b5d7ae3c2f506f8a94603957f53e0b2dbb (patch) | |
tree | 4f088bb8d12e227d9fdc5ebeb50e8999e65d700c | |
parent | 1d85dec79e6b5dab3b1a7988f95603a8918e2993 (diff) |
Allow specifying directory component as part of package name in bdep-new
The behavior is equivalent to specifying the directory with --output-dir|-o:
bdep new foo/hello
bdep new -o foo/hello hello
-rw-r--r-- | bdep/new.cli | 3 | ||||
-rw-r--r-- | bdep/new.cxx | 30 |
2 files changed, 33 insertions, 0 deletions
diff --git a/bdep/new.cli b/bdep/new.cli index 3ec489c..cdc84c3 100644 --- a/bdep/new.cli +++ b/bdep/new.cli @@ -44,6 +44,9 @@ namespace bdep \cb{--source} first create according to <spec> a new \cb{build2} project/package called <name> in the <name> subdirectory of the current working directory (unless overridden with \c{\b{--output-dir}|\b{-o}}). + If <name> contains a directory component, then the project/package is + created in this directory, as if it was specified with + \c{\b{--output-dir}|\b{-o}}. The first form then, unless the \cb{--no-init} option is specified, initializes an empty project database as if by executing the diff --git a/bdep/new.cxx b/bdep/new.cxx index 2a8a52d..e870648 100644 --- a/bdep/new.cxx +++ b/bdep/new.cxx @@ -524,7 +524,37 @@ cmd_new (cmd_new_options&& o, cli::group_scanner& args) // string a; if (args.more ()) + { a = args.next (); + + // Reduce name with a directory component to the simple name with + // --output-dir case. + // + if (path::traits_type::find_separator (a) != string::npos) + { + try + { + dir_path p (move (a)); + a = p.leaf ().string (); + + if (!p.simple ()) + { + if (o.output_dir_specified ()) + { + fail << "both --output-dir|-o and directory component in name " + << "specified"; + } + + o.output_dir (move (p)); + o.output_dir_specified (true); + } + } + catch (const invalid_path& e) + { + fail << "invalid path '" << e.path << "'"; + } + } + } else { if (!o.output_dir_specified ()) |