aboutsummaryrefslogtreecommitdiff
path: root/tests/manifest/driver.cxx
diff options
context:
space:
mode:
authorKaren Arutyunov <karen@codesynthesis.com>2019-04-30 20:26:36 +0300
committerKaren Arutyunov <karen@codesynthesis.com>2019-05-08 15:39:23 +0300
commit0575ec4e2084c553fa56e3d645233b118936a2d5 (patch)
tree9e83709271b25f3b0071289a611317cfd837965b /tests/manifest/driver.cxx
parent45218bf14ea1e8041b303bea313c939e1ec77a91 (diff)
Add support for description-type package manifest value
Diffstat (limited to 'tests/manifest/driver.cxx')
-rw-r--r--tests/manifest/driver.cxx103
1 files changed, 60 insertions, 43 deletions
diff --git a/tests/manifest/driver.cxx b/tests/manifest/driver.cxx
index 5f8a0f5..6ef6193 100644
--- a/tests/manifest/driver.cxx
+++ b/tests/manifest/driver.cxx
@@ -20,7 +20,7 @@ using namespace bpkg;
// Usages:
//
// argv[0] (-pp|-dp|-gp|-pr|-dr|-gr|-s)
-// argv[0] [-c] -p
+// argv[0] -p -c -i
// argv[0] -ec <version>
//
// In the first form read and parse manifest list from stdin and serialize it
@@ -35,8 +35,12 @@ using namespace bpkg;
// -s parse signature manifest
//
// In the second form read and parse the package manifest from stdin and
-// serialize it to stdout. Complete the dependency constraints if -c is
-// specified. Note: -c, if specified, should go before -p on the command line.
+// serialize it to stdout.
+//
+// -c complete the dependency constraints
+// -i ignore unknown
+//
+// Note: the above options should go after -p on the command line.
//
// In the third form read and parse dependency constraints from stdin and
// roundtrip them to stdout together with their effective constraints,
@@ -45,18 +49,8 @@ using namespace bpkg;
int
main (int argc, char* argv[])
{
- assert (argc <= 3);
- string opt (argv[1]);
-
- bool complete_depends (opt == "-c");
-
- if (complete_depends)
- {
- opt = argv[2];
- assert (opt == "-p");
- }
-
- assert ((opt == "-ec" || complete_depends) == (argc == 3));
+ assert (argc >= 2);
+ string mode (argv[1]);
cout.exceptions (ios_base::failbit | ios_base::badbit);
@@ -65,8 +59,49 @@ main (int argc, char* argv[])
try
{
- if (opt == "-ec")
+ if (mode == "-p")
{
+ bool complete_depends (false);
+ bool ignore_unknown (false);
+
+ for (int i (2); i != argc; ++i)
+ {
+ string o (argv[i]);
+
+ if (o == "-c")
+ complete_depends = true;
+ else if (o == "-i")
+ ignore_unknown = true;
+ else
+ assert (false);
+ }
+
+ cin.exceptions (ios_base::failbit | ios_base::badbit);
+
+ package_manifest (
+ p,
+ [] (version& v)
+ {
+ // Emulate populating the snapshot information for the latest
+ // snapshot.
+ //
+ if (butl::optional<standard_version> sv =
+ parse_standard_version (v.string ()))
+ {
+ if (sv->latest_snapshot ())
+ {
+ sv->snapshot_sn = 123;
+ v = version (sv->string ());
+ }
+ }
+ },
+ ignore_unknown,
+ complete_depends).serialize (s);
+ }
+ else if (mode == "-ec")
+ {
+ assert (argc == 3);
+
version v (argv[2]);
cin.exceptions (ios_base::badbit);
@@ -84,41 +119,23 @@ main (int argc, char* argv[])
}
else
{
+ assert (argc == 2);
+
cin.exceptions (ios_base::failbit | ios_base::badbit);
- if (opt == "-p")
- package_manifest (
- p,
- [] (version& v)
- {
- // Emulate populating the snapshot information for the latest
- // snapshot.
- //
- if (butl::optional<standard_version> sv =
- parse_standard_version (v.string ()))
- {
- if (sv->latest_snapshot ())
- {
- sv->snapshot_sn = 123;
- v = version (sv->string ());
- }
- }
- },
- false /* ignore_unknown */,
- complete_depends).serialize (s);
- else if (opt == "-pp")
+ if (mode == "-pp")
pkg_package_manifests (p).serialize (s);
- else if (opt == "-dp")
+ else if (mode == "-dp")
dir_package_manifests (p).serialize (s);
- else if (opt == "-gp")
+ else if (mode == "-gp")
git_package_manifests (p).serialize (s);
- else if (opt == "-pr")
+ else if (mode == "-pr")
pkg_repository_manifests (p).serialize (s);
- else if (opt == "-dr")
+ else if (mode == "-dr")
dir_repository_manifests (p).serialize (s);
- else if (opt == "-gr")
+ else if (mode == "-gr")
git_repository_manifests (p).serialize (s);
- else if (opt == "-s")
+ else if (mode == "-s")
signature_manifest (p).serialize (s);
else
assert (false);