diff options
author | Paul Cristian Sarbu <paul.cristian.sarbu@huawei.com> | 2023-11-24 11:31:42 +0100 |
---|---|---|
committer | Paul Cristian Sarbu <paul.cristian.sarbu@huawei.com> | 2023-11-27 15:03:20 +0100 |
commit | cf04253130030bc28866d10aa1f8fe1353643d42 (patch) | |
tree | ef7049624771866455105a8dab7b001840139701 /src/buildtool/build_engine/base_maps/rule_map.cpp | |
parent | bc09302c2772c979c45ecc716c36e4a70bb484ac (diff) | |
download | justbuild-cf04253130030bc28866d10aa1f8fe1353643d42.tar.gz |
Refactoring RepositoryConfig
With the introduction of 'just serve', export targets can now be
built also independently from one another based on their
corresponding minimal repository configuration, as stored in the
target cache key.
In this context, this commit changes the RepositoryConfig usage
from one global (static) instance to pointers passed as necessary
throughout the code.
Diffstat (limited to 'src/buildtool/build_engine/base_maps/rule_map.cpp')
-rw-r--r-- | src/buildtool/build_engine/base_maps/rule_map.cpp | 47 |
1 files changed, 28 insertions, 19 deletions
diff --git a/src/buildtool/build_engine/base_maps/rule_map.cpp b/src/buildtool/build_engine/base_maps/rule_map.cpp index c8a3dc22..0a198490 100644 --- a/src/buildtool/build_engine/base_maps/rule_map.cpp +++ b/src/buildtool/build_engine/base_maps/rule_map.cpp @@ -42,9 +42,11 @@ auto const kRuleFields = std::unordered_set<std::string>{"anonymous", "tainted", "target_fields"}; -[[nodiscard]] auto ReadAnonymousObject(EntityName const& id, - nlohmann::json const& json, - AsyncMapConsumerLoggerPtr const& logger) +[[nodiscard]] auto ReadAnonymousObject( + EntityName const& id, + nlohmann::json const& json, + gsl::not_null<RepositoryConfig*> const& repo_config, + AsyncMapConsumerLoggerPtr const& logger) -> std::optional<UserRule::anonymous_defs_t> { auto obj = GetOrDefault(json, "anonymous", nlohmann::json::object()); if (not obj.is_object()) { @@ -123,7 +125,7 @@ auto const kRuleFields = std::unordered_set<std::string>{"anonymous", Expression::map_t::underlying_map_t rule_mapping{}; for (auto const& [key, val] : rule_map->items()) { auto rule_name = ParseEntityNameFromJson( - val, id, [&logger, &id, &name = name](auto msg) { + val, id, repo_config, [&logger, &id, &name = name](auto msg) { (*logger)( fmt::format("Parsing rule name for entry {} in field " "anonymous in rule {} failed with:\n{}", @@ -148,9 +150,11 @@ auto const kRuleFields = std::unordered_set<std::string>{"anonymous", return anon_defs; } -[[nodiscard]] auto ReadImplicitObject(EntityName const& id, - nlohmann::json const& json, - AsyncMapConsumerLoggerPtr const& logger) +[[nodiscard]] auto ReadImplicitObject( + EntityName const& id, + nlohmann::json const& json, + gsl::not_null<RepositoryConfig*> const& repo_config, + AsyncMapConsumerLoggerPtr const& logger) -> std::optional<UserRule::implicit_t> { auto map = GetOrDefault(json, "implicit", nlohmann::json::object()); if (not map.is_object()) { @@ -175,7 +179,10 @@ auto const kRuleFields = std::unordered_set<std::string>{"anonymous", targets.reserve(val.size()); for (auto const& item : val) { auto expr_id = ParseEntityNameFromJson( - item, id, [&logger, &item, &id](std::string const& parse_err) { + item, + id, + repo_config, + [&logger, &item, &id](std::string const& parse_err) { (*logger)(fmt::format("Parsing entry {} in implicit field " "of rule {} failed with:\n{}", item.dump(), @@ -234,12 +241,14 @@ auto const kRuleFields = std::unordered_set<std::string>{"anonymous", auto CreateRuleMap(gsl::not_null<RuleFileMap*> const& rule_file_map, gsl::not_null<ExpressionFunctionMap*> const& expr_map, + gsl::not_null<RepositoryConfig*> const& repo_config, std::size_t jobs) -> UserRuleMap { - auto user_rule_creator = [rule_file_map, expr_map](auto ts, - auto setter, - auto logger, - auto /*subcaller*/, - auto const& id) { + auto user_rule_creator = [rule_file_map, expr_map, repo_config]( + auto ts, + auto setter, + auto logger, + auto /*subcaller*/, + auto const& id) { if (not id.IsDefinitionName()) { (*logger)(fmt::format("{} cannot name a rule", id.ToString()), true); @@ -248,7 +257,7 @@ auto CreateRuleMap(gsl::not_null<RuleFileMap*> const& rule_file_map, rule_file_map->ConsumeAfterKeysReady( ts, {id.ToModule()}, - [ts, expr_map, setter = std::move(setter), logger, id]( + [ts, expr_map, repo_config, setter = std::move(setter), logger, id]( auto json_values) { const auto& target_ = id.GetNamedTarget(); auto rule_it = json_values[0]->find(target_.name); @@ -288,14 +297,14 @@ auto CreateRuleMap(gsl::not_null<RuleFileMap*> const& rule_file_map, return; } - auto implicit_targets = - ReadImplicitObject(id, rule_it.value(), logger); + auto implicit_targets = ReadImplicitObject( + id, rule_it.value(), repo_config, logger); if (not implicit_targets) { return; } - auto anonymous_defs = - ReadAnonymousObject(id, rule_it.value(), logger); + auto anonymous_defs = ReadAnonymousObject( + id, rule_it.value(), repo_config, logger); if (not anonymous_defs) { return; } @@ -311,7 +320,7 @@ auto CreateRuleMap(gsl::not_null<RuleFileMap*> const& rule_file_map, } auto import_aliases = - reader->ReadEntityAliasesObject("imports"); + reader->ReadEntityAliasesObject("imports", repo_config); if (not import_aliases) { return; } |