diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2018-05-15 16:14:56 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2018-05-15 16:14:56 +0200 |
commit | 0c2a4d6c3c832671a1f5647ab1b095adef2e985e (patch) | |
tree | 339b64465ad5f710223173fc26851ea084f2beb2 | |
parent | 58cd2d5788147c80d6f266b6984615bbd23516d7 (diff) |
Implement -@foo as alternative to @foo, also add --config-name|-n
An argument with leading '@' has special meaning in Windows PowerShell.
-rw-r--r-- | bdep/bdep.cxx | 5 | ||||
-rw-r--r-- | bdep/config.cxx | 22 | ||||
-rw-r--r-- | bdep/project.cli | 16 |
3 files changed, 27 insertions, 16 deletions
diff --git a/bdep/bdep.cxx b/bdep/bdep.cxx index c9d3234..c614cc0 100644 --- a/bdep/bdep.cxx +++ b/bdep/bdep.cxx @@ -88,9 +88,10 @@ init (const common_options& co, cli::group_scanner& scan, strings& args) continue; } - // @<cfg-name> + // @<cfg-name> & -@<cfg-name> // - if (*a == '@' && cfg_name (&o, a + 1)) + if ((*a == '@' && cfg_name (&o, a + 1)) || + (*a == '-' && a[1] == '@' && cfg_name (&o, a + 2))) { scan.next (); continue; diff --git a/bdep/config.cxx b/bdep/config.cxx index e75b817..2e50f5c 100644 --- a/bdep/config.cxx +++ b/bdep/config.cxx @@ -12,25 +12,33 @@ using namespace std; namespace bdep { - // Translate the configuration directory that is actually a name (@foo) to - // the real directory (prj-foo) and name (@foo). + // Translate the configuration directory that is actually a name (@foo or + // -@foo) to the real directory (prj-foo) and name (@foo). // static inline void translate_path_name (const dir_path& prj, dir_path& path, optional<string>& name) { - if (name || !path.simple () || path.string ().front () != '@') + if (name || !path.simple ()) return; - string n (move (path).string ()); // Move out. - n.erase (0, 1); // Remove leading '@'. + size_t n; + { + const string& s (path.string ()); + if (s.size () > 1 && s[0] == '@') n = 1; + else if (s.size () > 2 && s[0] == '-' && s[1] == '@') n = 2; + else return; + } + + string s (move (path).string ()); // Move out. + s.erase (0, n); // Remove leading '@' or '-@'. path = prj; path += '-'; - path += n; + path += s; - name = move (n); + name = move (s); } shared_ptr<configuration> diff --git a/bdep/project.cli b/bdep/project.cli index 0053c19..469e33d 100644 --- a/bdep/project.cli +++ b/bdep/project.cli @@ -54,18 +54,20 @@ namespace bdep // class configuration_name_options: common_options { + // Note that this is also used as storage for configuration names + // specified as @<name>. + // + strings --config-name|-n + { + "<name>", + "Specify the build configuration as a name." + }; + vector<uint64_t> --config-id { "<num>", "Specify the build configuration as an id." }; - - // Storage for configuration names specified as @<cfg-name>. - // - // Note that we leave it undocumented so that it's not mentioned in - // documentation. - // - strings --config-name; }; // Common options for commands that operate on project/packages (prj-spec |