diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2015-09-04 14:09:51 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2015-09-04 14:09:51 +0200 |
commit | d3f62eb0cbdd6080a26d4e9013bf9f6671cee9d9 (patch) | |
tree | 0c19bd064f26a4bed2fb1b786f70cfd8d4867f56 /bpkg/manifest.cxx | |
parent | ce6eb3555b1264c14563eb383c25f4132c0d2a89 (diff) |
Split manifests into package_manifests and repository_manifests
Diffstat (limited to 'bpkg/manifest.cxx')
-rw-r--r-- | bpkg/manifest.cxx | 62 |
1 files changed, 38 insertions, 24 deletions
diff --git a/bpkg/manifest.cxx b/bpkg/manifest.cxx index d080fbb..4cbaad5 100644 --- a/bpkg/manifest.cxx +++ b/bpkg/manifest.cxx @@ -773,6 +773,24 @@ namespace bpkg s.next ("", ""); // End of manifest. } + // package_manifests + // + package_manifests:: + package_manifests (parser& p) + { + for (name_value nv (p.next ()); !nv.empty (); nv = p.next ()) + push_back (package_manifest (p, nv)); + } + + void package_manifests:: + serialize (serializer& s) const + { + for (const package_manifest& p: *this) + p.serialize (s); + + s.next ("", ""); // End of stream. + } + // repository_location // // Location parameter type is fully qualified as compiler gets confused with @@ -1089,42 +1107,38 @@ namespace bpkg s.next ("", ""); // End of manifest. } - // manifests + // repository_manifests // - manifests:: - manifests (parser& p) + repository_manifests:: + repository_manifests (parser& p) { - bool rep (true); // Parsing repository list. - - for (name_value nv (p.next ()); !nv.empty (); nv = p.next ()) + name_value nv (p.next ()); + while (!nv.empty ()) { - if (rep) - { - repositories.push_back (repository_manifest (p, nv)); + push_back (repository_manifest (p, nv)); + nv = p.next (); - // Manifest for local repository signals the end of the - // repository list. - // - if (repositories.back ().location.empty ()) - rep = false; - } - else - packages.push_back (package_manifest (p, nv)); + // Make sure there is location in all except the last entry. + // + if (back ().location.empty () && !nv.empty ()) + throw parsing (p.name (), nv.name_line, nv.name_column, + "repository location expected"); } + + if (empty () || !back ().location.empty ()) + throw parsing (p.name (), nv.name_line, nv.name_column, + "base repository manifest expected"); } - void manifests:: + void repository_manifests:: serialize (serializer& s) const { - if (repositories.empty () || !repositories.back ().location.empty ()) - throw serialization (s.name (), "local repository manifest expected"); + if (empty () || !back ().location.empty ()) + throw serialization (s.name (), "base repository manifest expected"); - for (const repository_manifest& r: repositories) + for (const repository_manifest& r: *this) r.serialize (s); - for (const package_manifest& p: packages) - p.serialize (s); - s.next ("", ""); // End of stream. } } |