diff options
author | Karen Arutyunov <karen@codesynthesis.com> | 2022-08-25 20:54:40 +0300 |
---|---|---|
committer | Karen Arutyunov <karen@codesynthesis.com> | 2022-08-29 17:18:19 +0300 |
commit | 6613fbc2a3fc96b491b6691145c72c5a9550dc84 (patch) | |
tree | bb1116efb5b475608458038240a4ba80e32b99af /mod/mod-build-task.cxx | |
parent | 340cf0935a199240f6daaab8a347e22172f4d15b (diff) |
Add target to build configuration id
Diffstat (limited to 'mod/mod-build-task.cxx')
-rw-r--r-- | mod/mod-build-task.cxx | 45 |
1 files changed, 22 insertions, 23 deletions
diff --git a/mod/mod-build-task.cxx b/mod/mod-build-task.cxx index 29c048d..137cf6a 100644 --- a/mod/mod-build-task.cxx +++ b/mod/mod-build-task.cxx @@ -13,7 +13,6 @@ #include <libbutl/regex.hxx> #include <libbutl/sha256.hxx> -#include <libbutl/utility.hxx> // compare_c_string #include <libbutl/openssl.hxx> #include <libbutl/fdstream.hxx> // nullfd #include <libbutl/process-io.hxx> @@ -157,8 +156,7 @@ handle (request& rq, response& rs) task_response_manifest tsm; // Map build configurations to machines that are capable of building them. - // The first matching machine is selected for each configuration. Also - // create the configuration name list for use in database queries. + // The first matching machine is selected for each configuration. // struct config_machine { @@ -166,10 +164,9 @@ handle (request& rq, response& rs) machine_header_manifest* machine; }; - using config_machines = map<const char*, config_machine, compare_c_string>; + using config_machines = map<build_config_id, config_machine>; - cstrings cfg_names; - config_machines cfg_machines; + config_machines conf_machines; for (const auto& c: *build_conf_) { @@ -182,10 +179,9 @@ handle (request& rq, response& rs) if (path_match (dash_components_to_path (m.name), dash_components_to_path (c.machine_pattern), dir_path () /* start */, - path_match_flags::match_absent) && - cfg_machines.insert ( - make_pair (c.name.c_str (), config_machine ({&c, &m}))).second) - cfg_names.push_back (c.name.c_str ()); + path_match_flags::match_absent)) + conf_machines.emplace (build_config_id {c.name, c.target}, + config_machine {&c, &m}); } catch (const invalid_path&) {} } @@ -203,7 +199,7 @@ handle (request& rq, response& rs) // rebuild. The rebuild preference is given in the following order: the // greater force state, the greater overall status, the lower timestamp. // - if (!cfg_machines.empty ()) + if (!conf_machines.empty ()) { vector<shared_ptr<build>> rebuilds; @@ -223,6 +219,7 @@ handle (request& rq, response& rs) b->package_name.string () + '/' + b->package_version.string () + '/' + b->configuration + '/' + + b->target.string () + '/' + b->toolchain_name + '/' + b->toolchain_version.string () + '/' + to_string (ts)); @@ -599,12 +596,14 @@ handle (request& rq, response& rs) package_id id; + bld_query sq (false); + for (const auto& cm: conf_machines) + sq = sq || (bld_query::id.configuration == cm.first.name && + bld_query::id.target == cm.first.target); + bld_query bq ( equal<build> (bld_query::id.package, id) && - - bld_query::id.configuration.in_range (cfg_names.begin (), - cfg_names.end ()) && - + sq && bld_query::id.toolchain_name == tqm.toolchain_name && compare_version_eq (bld_query::id.toolchain_version, @@ -714,12 +713,13 @@ handle (request& rq, response& rs) // Also save the built package configurations for which it's time to // be rebuilt. // - config_machines configs (cfg_machines); // Make a copy for this pkg. + config_machines configs (conf_machines); // Make a copy for this pkg. auto pkg_builds (bld_prep_query.execute ()); for (auto i (pkg_builds.begin ()); i != pkg_builds.end (); ++i) { - auto j (configs.find (i->id.configuration.c_str ())); + auto j (configs.find (build_config_id {i->id.configuration, + i->id.target})); // Outdated configurations are already excluded with the database // query. @@ -758,6 +758,7 @@ handle (request& rq, response& rs) build_id bid (move (id), cm.config->name, + cm.config->target, move (tqm.toolchain_name), toolchain_version); @@ -784,6 +785,7 @@ handle (request& rq, response& rs) move (bid.package.name), move (bp.version), move (bid.configuration), + move (bid.target), move (bid.toolchain_name), move (toolchain_version), move (login), @@ -791,7 +793,6 @@ handle (request& rq, response& rs) move (cl), mh.name, move (mh.summary), - cm.config->target, controller_checksum (*cm.config), machine_checksum (*cm.machine)); @@ -823,7 +824,6 @@ handle (request& rq, response& rs) b->agent_challenge = move (cl); b->machine = mh.name; b->machine_summary = move (mh.summary); - b->target = cm.config->target; string ccs (controller_checksum (*cm.config)); string mcs (machine_checksum (*cm.machine)); @@ -911,11 +911,12 @@ handle (request& rq, response& rs) b->state == build_state::built && needs_rebuild (*b)) { - auto i (cfg_machines.find (b->id.configuration.c_str ())); + auto i (conf_machines.find (build_config_id {b->configuration, + b->target})); // Only actual package configurations are loaded (see above). // - assert (i != cfg_machines.end ()); + assert (i != conf_machines.end ()); const config_machine& cm (i->second); // Rebuild the package if still present, is buildable, doesn't @@ -962,8 +963,6 @@ handle (request& rq, response& rs) b->machine = mh.name; b->machine_summary = mh.summary; - b->target = cm.config->target; - // Issue the hard rebuild if the timeout expired, rebuild is // forced, or the configuration or machine has changed. // |