From 7fa57f8522ed7741c00ed3cd64cf956716aebd2c Mon Sep 17 00:00:00 2001 From: Karen Arutyunov Date: Mon, 11 Mar 2024 21:23:21 +0300 Subject: Add support for build auxiliary machines/configurations --- libbrep/common.hxx | 63 ++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 56 insertions(+), 7 deletions(-) (limited to 'libbrep/common.hxx') diff --git a/libbrep/common.hxx b/libbrep/common.hxx index 9c398c8..6220149 100644 --- a/libbrep/common.hxx +++ b/libbrep/common.hxx @@ -347,6 +347,13 @@ namespace brep #pragma db value(build_constraint) definition + // build_auxiliaries + // + using bpkg::build_auxiliary; + using build_auxiliaries = vector; + + #pragma db value(build_auxiliary) definition + // email // using bpkg::email; @@ -360,10 +367,6 @@ namespace brep #pragma db value(build_package_config) definition - // @@ TMP AUXILIARY - // - #pragma db member(build_package_config::auxiliaries) transient - // 1 for the default configuration which is always present. // using build_package_configs = small_vector; @@ -376,11 +379,12 @@ namespace brep // Note that ODB doesn't support containers of value types which contain // containers. Thus, we will persist/load - // package_build_config::{builds,constraint} via the separate nested - // containers using the adapter classes. + // package_build_config::{builds,constraint,auxiliaries} via the separate + // nested containers using the adapter classes. + // + // build_package_config::builds // #pragma db member(build_package_config::builds) transient - #pragma db member(build_package_config::constraints) transient using build_class_expr_key = odb::nested_key; using build_class_exprs_map = std::map; @@ -419,6 +423,10 @@ namespace brep } }; + // build_package_config::constraints + // + #pragma db member(build_package_config::constraints) transient + using build_constraint_key = odb::nested_key; using build_constraints_map = std::map; @@ -456,6 +464,47 @@ namespace brep } }; + // build_package_config::auxiliaries + // + #pragma db member(build_package_config::auxiliaries) transient + + using build_auxiliary_key = odb::nested_key; + using build_auxiliaries_map = std::map; + + #pragma db value(build_auxiliary_key) + #pragma db member(build_auxiliary_key::outer) column("config_index") + #pragma db member(build_auxiliary_key::inner) column("index") + + // Adapter for build_package_config::auxiliaries. + // + class build_package_config_auxiliaries: + public small_vector // 1 as for build_package_configs. + { + public: + build_package_config_auxiliaries () = default; + + explicit + build_package_config_auxiliaries (const build_package_configs& cs) + { + reserve (cs.size ()); + for (const build_package_config& c: cs) + push_back (c.auxiliaries); + } + + void + to_configs (build_package_configs& cs) && + { + // Note that the empty trailing entries will be missing (see ODB's + // nested-container.hxx for details). + // + assert (size () <= cs.size ()); + + auto i (cs.begin ()); + for (build_auxiliaries& bas: *this) + i++->auxiliaries = move (bas); + } + }; + // The primary reason why a package is unbuildable by the build bot // controller service. // -- cgit v1.1