aboutsummaryrefslogtreecommitdiff
path: root/libbpkg/manifest.cxx
diff options
context:
space:
mode:
authorKaren Arutyunov <karen@codesynthesis.com>2018-05-23 00:36:15 +0300
committerKaren Arutyunov <karen@codesynthesis.com>2018-05-24 17:56:03 +0300
commitb39e27a9f1ab04cb67ffad1d2c7e7ae089d5e8c4 (patch)
treed79f6d16d451f081af3a7014e3b629a3d85ca3fc /libbpkg/manifest.cxx
parente3c8b1c5273e20a6c20b5ba923cdcea919340950 (diff)
Add package_name class
Diffstat (limited to 'libbpkg/manifest.cxx')
-rw-r--r--libbpkg/manifest.cxx63
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)