From 151c64b5d7ae3c2f506f8a94603957f53e0b2dbb Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Mon, 13 Dec 2021 12:01:21 +0200 Subject: 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 --- bdep/new.cli | 3 +++ bdep/new.cxx | 30 ++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+) 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 a new \cb{build2} project/package called in the subdirectory of the current working directory (unless overridden with \c{\b{--output-dir}|\b{-o}}). + If 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 ()) -- cgit v1.1