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 /bdep/config.cxx | |
parent | 58cd2d5788147c80d6f266b6984615bbd23516d7 (diff) |
Implement -@foo as alternative to @foo, also add --config-name|-n
An argument with leading '@' has special meaning in Windows PowerShell.
Diffstat (limited to 'bdep/config.cxx')
-rw-r--r-- | bdep/config.cxx | 22 |
1 files changed, 15 insertions, 7 deletions
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> |