aboutsummaryrefslogtreecommitdiff
path: root/libbbot
diff options
context:
space:
mode:
authorKaren Arutyunov <karen@codesynthesis.com>2021-09-06 19:05:38 +0300
committerKaren Arutyunov <karen@codesynthesis.com>2021-09-24 12:43:21 +0300
commit066c25383db8d24cc0aed21d9bd4a071c1afdbbd (patch)
tree272f97e67f039cb2e26004b47f104e4df0d172fa /libbbot
parent52305ec0f8bd3fbff63a538fbef12ab9fee4340f (diff)
Add support for requires, tests, examples, benchmarks, and host task manifest values and drop test-exclude value
Diffstat (limited to 'libbbot')
-rw-r--r--libbbot/manifest.cxx57
-rw-r--r--libbbot/manifest.hxx19
2 files changed, 48 insertions, 28 deletions
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<package, 1> test_exclusions;
+ std::vector<bpkg::requirement_alternatives> requirements;
+ butl::small_vector<bpkg::test_dependency, 1> 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<bool> 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<package, 1> te,
+ std::vector<bpkg::requirement_alternatives> ra,
+ butl::small_vector<bpkg::test_dependency, 1> ts,
std::string mn,
butl::target_triplet tg,
butl::optional<std::string> en,
strings cf,
+ butl::optional<bool> ht,
strings wr,
butl::optional<std::string> 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)) {}