diff options
author | Karen Arutyunov <karen@codesynthesis.com> | 2019-05-22 15:26:09 +0300 |
---|---|---|
committer | Karen Arutyunov <karen@codesynthesis.com> | 2019-05-22 16:29:43 +0300 |
commit | bc970e792159c6b03febb978fc8c9f09dc91e602 (patch) | |
tree | 0e1b7174da6fa040703ca9fb10314b27c6118648 /libbpkg/manifest.cxx | |
parent | 0575ec4e2084c553fa56e3d645233b118936a2d5 (diff) |
Add support for package manifest upstream-version value
Diffstat (limited to 'libbpkg/manifest.cxx')
-rw-r--r-- | libbpkg/manifest.cxx | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/libbpkg/manifest.cxx b/libbpkg/manifest.cxx index dc3ff86..139b7a8 100644 --- a/libbpkg/manifest.cxx +++ b/libbpkg/manifest.cxx @@ -1586,6 +1586,8 @@ namespace bpkg return email (move (v), move (c)); } + const version stub_version (0, "0", nullopt, 0, 0); + static void parse_package_manifest ( parser& p, @@ -1637,6 +1639,11 @@ namespace bpkg return (fl & f) != package_manifest_flags::none; }; + // Cache the upstream version manifest value and validate whether it's + // allowed later, after the version value is parsed. + // + optional<name_value> upstream_version; + // We will cache the depends manifest values to parse and, if requested, // complete the dependency constraints later, after the version value is // parsed. @@ -1706,6 +1713,16 @@ namespace bpkg m.version.string () + ": earliest release"); } } + else if (n == "upstream-version") + { + if (upstream_version) + bad_name ("upstream package version redefinition"); + + if (v.empty ()) + bad_value ("empty upstream package version"); + + upstream_version = move (nv); + } else if (n == "project") { if (m.project) @@ -2004,6 +2021,20 @@ namespace bpkg else if (m.license_alternatives.empty ()) bad_value ("no project license specified"); + // Verify that the upstream version is not specified for a stub. + // + if (upstream_version) + { + // Restore as bad_name() uses its line/column. + // + nv = move (*upstream_version); + + if (m.version.compare (stub_version, true) == 0) + bad_name ("upstream package version specified for a stub"); + + m.upstream_version = move (nv.value); + } + // Verify that description is specified if the description type is // specified. // @@ -2433,6 +2464,9 @@ namespace bpkg s.next ("name", m.name.string ()); s.next ("version", m.version.string ()); + if (m.upstream_version) + s.next ("upstream-version", *m.upstream_version); + if (m.project) s.next ("project", m.project->string ()); |