From 066c25383db8d24cc0aed21d9bd4a071c1afdbbd Mon Sep 17 00:00:00 2001 From: Karen Arutyunov Date: Mon, 6 Sep 2021 19:05:38 +0300 Subject: Add support for requires, tests, examples, benchmarks, and host task manifest values and drop test-exclude value --- libbbot/manifest.cxx | 57 +++++++++++++++++++++++++++++++--------------------- libbbot/manifest.hxx | 19 +++++++++++++----- 2 files changed, 48 insertions(+), 28 deletions(-) (limited to 'libbbot') diff --git a/libbbot/manifest.cxx b/libbbot/manifest.cxx index 33b5046..5e00201 100644 --- a/libbbot/manifest.cxx +++ b/libbbot/manifest.cxx @@ -68,9 +68,9 @@ namespace bbot // interactive_mode // string - to_string (interactive_mode s) + to_string (interactive_mode m) { - switch (s) + switch (m) { case interactive_mode::false_: return "false"; case interactive_mode::true_: return "true"; @@ -329,7 +329,8 @@ namespace bbot } catch (const invalid_argument&) { - bad_value (string ("invalid task request interactive mode")); + bad_value ( + string ("invalid task request interactive mode '" + v + "'")); } } else if (n == "interactive-login") @@ -597,37 +598,28 @@ namespace bbot trust.emplace_back (move (v)); } - else if (n == "test-exclude") + else if (n == "requires") { - size_t p (v.find ('/')); - if (p == string::npos) - bad_value ("invalid test exclusion package: '/' is expected"); - - package_name pn; - try { - pn = package_name (string (v, 0, p)); + requirements.push_back (requirement_alternatives (v)); } catch (const invalid_argument& e) { - bad_value (string ("invalid test exclusion package name: ") + - e.what ()); + bad_value (e.what ()); } - - bpkg::version pv; - + } + else if (n == "tests" || n == "examples" || n == "benchmarks") + { try { - pv = bpkg::version (string (v, p + 1)); + tests.push_back (test_dependency (move (v), + to_test_dependency_type (n))); } catch (const invalid_argument& e) { - bad_value (string ("invalid test exclusion package version: ") + - e.what ()); + bad_value (e.what ()); } - - test_exclusions.push_back (package {move (pn), move (pv)}); } else if (n == "machine") { @@ -673,6 +665,18 @@ namespace bbot if (config.empty ()) bad_value ("empty task configuration"); } + else if (n == "host") + { + if (host) + bad_name ("task host value redefinition"); + + if (v == "true") + host = true; + else if (v == "false") + host = false; + else + bad_value ("invalid task host value '" + v + "'"); + } else if (n == "warning-regex") { if (!warning_regex.empty ()) @@ -758,8 +762,11 @@ namespace bbot for (const string& v: trust) s.next ("trust", v); - for (const package& te: test_exclusions) - s.next ("test-exclude", te.name.string () + '/' + te.version.string ()); + for (const requirement_alternatives& r: requirements) + s.next ("requires", r.string ()); + + for (const test_dependency& t: tests) + s.next (to_string (t.type), t.string ()); s.next ("machine", machine); s.next ("target", target.string ()); @@ -788,6 +795,10 @@ namespace bbot }; serialize_list ("config", config); + + if (host) + s.next ("host", *host ? "true" : "false"); + serialize_list ("warning-regex", warning_regex); if (interactive) diff --git a/libbbot/manifest.hxx b/libbbot/manifest.hxx index c3bb6ce..b6c4263 100644 --- a/libbbot/manifest.hxx +++ b/libbbot/manifest.hxx @@ -164,10 +164,11 @@ namespace bbot // strings trust; - // Separate tests, examples, and benchmarks packages that should be - // excluded from building together with the primary package. + // The subset of the build task-relevant package manifest values (see + // bpkg::package_manifest for their semantics). // - butl::small_vector test_exclusions; + std::vector requirements; + butl::small_vector tests; std::string machine; // Build machine to use for building the package. @@ -181,6 +182,10 @@ namespace bbot // strings config; + // If true, then this configuration is self-hosted. + // + butl::optional host; + // Regular expressions for detecting warnings in the operation result logs // (in addition to the default list of expressions). // Note: could be quoted. @@ -199,22 +204,26 @@ namespace bbot bpkg::version vr, bpkg::repository_location rl, strings tr, - butl::small_vector te, + std::vector ra, + butl::small_vector ts, std::string mn, butl::target_triplet tg, butl::optional en, strings cf, + butl::optional ht, strings wr, butl::optional ir) : name (std::move (nm)), version (std::move (vr)), repository (std::move (rl)), trust (std::move (tr)), - test_exclusions (std::move (te)), + requirements (std::move (ra)), + tests (std::move (ts)), machine (std::move (mn)), target (std::move (tg)), environment (std::move (en)), config (std::move (cf)), + host (std::move (ht)), warning_regex (std::move (wr)), interactive (std::move (ir)) {} -- cgit v1.1