diff options
author | Karen Arutyunov <karen@codesynthesis.com> | 2018-05-23 00:36:15 +0300 |
---|---|---|
committer | Karen Arutyunov <karen@codesynthesis.com> | 2018-05-24 17:56:03 +0300 |
commit | b39e27a9f1ab04cb67ffad1d2c7e7ae089d5e8c4 (patch) | |
tree | d79f6d16d451f081af3a7014e3b629a3d85ca3fc /libbpkg/manifest.cxx | |
parent | e3c8b1c5273e20a6c20b5ba923cdcea919340950 (diff) |
Add package_name class
Diffstat (limited to 'libbpkg/manifest.cxx')
-rw-r--r-- | libbpkg/manifest.cxx | 63 |
1 files changed, 9 insertions, 54 deletions
diff --git a/libbpkg/manifest.cxx b/libbpkg/manifest.cxx index 3e9a4fa..b7c3a75 100644 --- a/libbpkg/manifest.cxx +++ b/libbpkg/manifest.cxx @@ -17,7 +17,7 @@ #include <libbutl/path.mxx> #include <libbutl/base64.mxx> #include <libbutl/utility.mxx> // casecmp(), lcase(), alpha(), - // alnum(), digit(), xdigit() + // digit(), xdigit() #include <libbutl/manifest-parser.mxx> #include <libbutl/manifest-serializer.mxx> #include <libbutl/standard-version.mxx> @@ -870,44 +870,6 @@ namespace bpkg return o; } - // Package name. - // - static const strings illegal_pkg_names ({ - "build", - "con", "prn", "aux", "nul", - "com1", "com2", "com3", "com4", "com5", "com6", "com7", "com8", "com9", - "lpt1", "lpt2", "lpt3", "lpt4", "lpt5", "lpt6", "lpt7", "lpt8", "lpt9"}); - - static const string legal_pkg_chars ("_+-."); - - void - validate_package_name (const string& name) - { - if (name.size () < 2) - throw invalid_argument ("length is less than two characters"); - - if (find (illegal_pkg_names.begin (), illegal_pkg_names.end (), name) != - illegal_pkg_names.end ()) - throw invalid_argument ("illegal name"); - - if (!alpha (name.front ())) - throw invalid_argument ("illegal first character (must be alphabetic)"); - - // Here we rely on the fact that the name length >= 2. - // - for (auto i (name.cbegin () + 1), e (name.cend () - 1); i != e; ++i) - { - char c (*i); - - if (!(alnum(c) || legal_pkg_chars.find (c) != string::npos)) - throw invalid_argument ("illegal character"); - } - - if (!alnum (name.back ())) - throw invalid_argument ( - "illegal last character (must be alphabetic or digit)"); - } - // pkg_package_manifest // static void @@ -986,14 +948,12 @@ namespace bpkg try { - validate_package_name (v); + m.name = package_name (move (v)); } catch (const invalid_argument& e) { bad_value (string ("invalid package name: ") + e.what ()); } - - m.name = move (v); } else if (n == "version") { @@ -1266,11 +1226,11 @@ namespace bpkg ne = i + 1; } - string nm (i == e ? move (lv) : string (b, ne)); + package_name nm; try { - validate_package_name (nm); + nm = package_name (i == e ? move (lv) : string (b, ne)); } catch (const invalid_argument& e) { @@ -1419,16 +1379,10 @@ namespace bpkg auto bad_value ([&s](const string& d) { throw serialization (s.name (), d);}); - try - { - validate_package_name (name); - } - catch (const invalid_argument& e) - { - bad_value (string ("invalid package name: ") + e.what ()); - } + if (name.empty ()) + bad_value ("empty package name"); - s.next ("name", name); + s.next ("name", name.string ()); s.next ("version", version.string ()); if (priority) @@ -1750,7 +1704,8 @@ namespace bpkg auto bad_value = [&p, &s](const string& d) { throw serialization ( - s.name (), d + " for " + p.name + "-" + p.version.string ()); + s.name (), + d + " for " + p.name.string () + "-" + p.version.string ()); }; if (p.description && p.description->file) |