diff options
author | Karen Arutyunov <karen@codesynthesis.com> | 2024-10-23 20:58:32 +0200 |
---|---|---|
committer | Karen Arutyunov <karen@codesynthesis.com> | 2024-10-24 09:51:31 +0200 |
commit | bc94f77ea57edfd3e5ba0d2505f451ce56bfd422 (patch) | |
tree | dc0ab0a87096614e33a648643e35d64996727e29 | |
parent | 85065024eb4ca2ec1dac4dc7cb1fc8ff8fb238c8 (diff) |
Add suppport for build-task tenant_service_type parameter
-rw-r--r-- | mod/mod-build-task.cxx | 35 | ||||
-rw-r--r-- | mod/module.cli | 7 |
2 files changed, 42 insertions, 0 deletions
diff --git a/mod/mod-build-task.cxx b/mod/mod-build-task.cxx index 917017b..2ae1237 100644 --- a/mod/mod-build-task.cxx +++ b/mod/mod-build-task.cxx @@ -203,6 +203,41 @@ package_query (bool custom_bot, query::build_repository::id.canonical_name.in_range (rp.begin (), rp.end ()); + // Filter by the types of services associated with the tenants, where the + // empty type denotes tenants without associated service. + // + if (params.tenant_service_type_specified ()) + { + cstrings ts; + bool et (false); + + for (const string& t: params.tenant_service_type ()) + { + if (!t.empty ()) + ts.push_back (t.c_str ()); + else + et = true; + } + + if (!ts.empty () && et) + { + q = q && + (query::build_tenant::service.type.in_range (ts.begin (), ts.end ()) || + query::build_tenant::service.type.is_null ()); + } + else if (!ts.empty ()) + { + q = q && query::build_tenant::service.type.in_range (ts.begin (), + ts.end ()); + } + else + { + assert (et); + + q = q && query::build_tenant::service.type.is_null (); + } + } + // If the interactive mode is false or true, then filter out the respective // packages. // diff --git a/mod/module.cli b/mod/module.cli index 9c47e31..5799697 100644 --- a/mod/module.cli +++ b/mod/module.cli @@ -1001,6 +1001,13 @@ namespace brep // Only consider tenants with this interactive build mode. // bbot::interactive_mode interactive = bbot::interactive_mode::both; + + // Only consider tenants which have third-party services of any of these + // types. The special empty type value denotes tenants without the + // associated service. If this parameter is absent, then consider all + // tenant types. + // + vector<string> tenant_service_type | t; }; class build_result |