aboutsummaryrefslogtreecommitdiff
path: root/libbpkg/manifest.cxx
diff options
context:
space:
mode:
authorKaren Arutyunov <karen@codesynthesis.com>2018-08-30 23:17:15 +0300
committerKaren Arutyunov <karen@codesynthesis.com>2018-08-31 18:18:03 +0300
commit2a362e8f024c032e14cff13cbca2a27a47c79448 (patch)
tree39b5ec44d69e24c85c047ff69c4649c85066ec58 /libbpkg/manifest.cxx
parent0f50af28d1cfb0c22f5b88e2bf674ab732e058d9 (diff)
Add package manifest flags
Diffstat (limited to 'libbpkg/manifest.cxx')
-rw-r--r--libbpkg/manifest.cxx50
1 files changed, 32 insertions, 18 deletions
diff --git a/libbpkg/manifest.cxx b/libbpkg/manifest.cxx
index 31c5ce0..9751e12 100644
--- a/libbpkg/manifest.cxx
+++ b/libbpkg/manifest.cxx
@@ -893,8 +893,8 @@ namespace bpkg
static void
parse_package_manifest (parser& p,
name_value nv,
- bool il,
bool iu,
+ package_manifest_flags fl,
package_manifest& m)
{
auto bad_name ([&p, &nv](const string& d) {
@@ -954,6 +954,11 @@ namespace bpkg
return email (move (p.first), move (p.second));
};
+ auto flag = [fl] (package_manifest_flags f)
+ {
+ return (fl & f) != package_manifest_flags::none;
+ };
+
for (nv = p.next (); !nv.empty (); nv = p.next ())
{
string& n (nv.name);
@@ -1052,7 +1057,7 @@ namespace bpkg
}
else if (n == "description-file")
{
- if (il)
+ if (flag (package_manifest_flags::forbid_file))
bad_name ("package description-file not allowed");
if (m.description)
@@ -1084,7 +1089,7 @@ namespace bpkg
}
else if (n == "changes-file")
{
- if (il)
+ if (flag (package_manifest_flags::forbid_file))
bad_name ("package changes-file not allowed");
auto vc (parser::split_comment (v));
@@ -1294,7 +1299,7 @@ namespace bpkg
}
else if (n == "location")
{
- if (!il)
+ if (flag (package_manifest_flags::forbid_location))
bad_name ("package location not allowed");
if (m.location)
@@ -1319,7 +1324,7 @@ namespace bpkg
}
else if (n == "sha256sum")
{
- if (!il)
+ if (flag (package_manifest_flags::forbid_sha256sum))
bad_name ("package sha256sum not allowed");
if (m.sha256sum)
@@ -1332,7 +1337,7 @@ namespace bpkg
}
else if (n == "fragment")
{
- if (!il)
+ if (flag (package_manifest_flags::forbid_fragment))
bad_name ("package repository fragment not allowed");
if (m.fragment)
@@ -1358,30 +1363,30 @@ namespace bpkg
else if (m.license_alternatives.empty ())
bad_value ("no project license specified");
- if (il)
- {
- if (!m.location)
- bad_name ("no package location specified");
+ if (!m.location && flag (package_manifest_flags::require_location))
+ bad_name ("no package location specified");
- if (!m.sha256sum)
- bad_name ("no package sha256sum specified");
- }
+ if (!m.sha256sum && flag (package_manifest_flags::require_sha256sum))
+ bad_name ("no package sha256sum specified");
}
package_manifest
pkg_package_manifest (parser& p, name_value nv, bool iu)
{
- package_manifest r;
- parse_package_manifest (p, nv, true, iu, r);
- return r;
+ return package_manifest (p,
+ move (nv),
+ iu,
+ package_manifest_flags::forbid_file |
+ package_manifest_flags::require_location |
+ package_manifest_flags::forbid_fragment);
}
// package_manifest
//
package_manifest::
- package_manifest (manifest_parser& p, bool iu)
+ package_manifest (manifest_parser& p, bool iu, package_manifest_flags fl)
{
- parse_package_manifest (p, p.next (), false, iu, *this);
+ parse_package_manifest (p, p.next (), iu, fl, *this);
// Make sure this is the end.
//
@@ -1391,6 +1396,15 @@ namespace bpkg
"single package manifest expected");
}
+ package_manifest::
+ package_manifest (manifest_parser& p,
+ name_value nv,
+ bool iu,
+ package_manifest_flags fl)
+ {
+ parse_package_manifest (p, move (nv), iu, fl, *this);
+ }
+
static void
serialize_package_manifest (manifest_serializer& s,
const package_manifest& m,