diff options
Diffstat (limited to 'src/buildtool')
22 files changed, 195 insertions, 138 deletions
diff --git a/src/buildtool/build_engine/base_maps/rule_map.cpp b/src/buildtool/build_engine/base_maps/rule_map.cpp index 2b05c11d..c8a3dc22 100644 --- a/src/buildtool/build_engine/base_maps/rule_map.cpp +++ b/src/buildtool/build_engine/base_maps/rule_map.cpp @@ -138,12 +138,12 @@ auto const kRuleFields = std::unordered_set<std::string>{"anonymous", rule_mapping.emplace(key, ExpressionPtr{std::move(*rule_name)}); } - anon_defs.emplace( - name, - UserRule::AnonymousDefinition{ - target->get<std::string>(), - provider->get<std::string>(), - ExpressionPtr{Expression::map_t{std::move(rule_mapping)}}}); + anon_defs.emplace(name, + UserRule::AnonymousDefinition{ + .target = target->get<std::string>(), + .provider = provider->get<std::string>(), + .rule_map = ExpressionPtr{ + Expression::map_t{std::move(rule_mapping)}}}); } return anon_defs; } diff --git a/src/buildtool/build_engine/base_maps/source_map.cpp b/src/buildtool/build_engine/base_maps/source_map.cpp index 8baf81c2..b2fa238b 100644 --- a/src/buildtool/build_engine/base_maps/source_map.cpp +++ b/src/buildtool/build_engine/base_maps/source_map.cpp @@ -31,7 +31,9 @@ auto as_target(const BuildMaps::Base::EntityName& key, ExpressionPtr artifact) auto stage = ExpressionPtr{ Expression::map_t{key.GetNamedTarget().name, std::move(artifact)}}; return std::make_shared<AnalysedTarget const>( - TargetResult{stage, Expression::kEmptyMap, stage}, + TargetResult{.artifact_stage = stage, + .provides = Expression::kEmptyMap, + .runfiles = stage}, std::vector<ActionDescription::Ptr>{}, std::vector<std::string>{}, std::vector<Tree::Ptr>{}, diff --git a/src/buildtool/build_engine/expression/target_result.cpp b/src/buildtool/build_engine/expression/target_result.cpp index 8bd3cbaa..2ec31a55 100644 --- a/src/buildtool/build_engine/expression/target_result.cpp +++ b/src/buildtool/build_engine/expression/target_result.cpp @@ -218,8 +218,10 @@ auto SerializeTargetResultWithReplacement( provided_nodes, provided_results, sofar); - auto result = ExpressionPtr{TargetNode{TargetNode::Abstract{ - node_type, string_fields, target_fields}}}; + auto result = ExpressionPtr{TargetNode{ + TargetNode::Abstract{.node_type = node_type, + .string_fields = string_fields, + .target_fields = target_fields}}}; sofar->emplace(id, result); return result; } @@ -256,10 +258,11 @@ auto SerializeTargetResultWithReplacement( provided_results, sofar); if (artifact_stage and runfiles and provides) { - return ExpressionPtr{TargetResult{std::move(artifact_stage), - std::move(provides), - std::move(runfiles), - /*is_cacheable=*/true}}; + return ExpressionPtr{ + TargetResult{.artifact_stage = std::move(artifact_stage), + .provides = std::move(provides), + .runfiles = std::move(runfiles), + .is_cacheable = true}}; } return ExpressionPtr{nullptr}; } diff --git a/src/buildtool/build_engine/target_map/built_in_rules.cpp b/src/buildtool/build_engine/target_map/built_in_rules.cpp index 5db35b41..ad9a12b5 100644 --- a/src/buildtool/build_engine/target_map/built_in_rules.cpp +++ b/src/buildtool/build_engine/target_map/built_in_rules.cpp @@ -199,7 +199,9 @@ void FileGenRuleWithDeps( ObjectType::File}}}}; auto analysis_result = std::make_shared<AnalysedTarget const>( - TargetResult{stage, ExpressionPtr{Expression::map_t{}}, stage}, + TargetResult{.artifact_stage = stage, + .provides = ExpressionPtr{Expression::map_t{}}, + .runfiles = stage}, std::vector<ActionDescription::Ptr>{}, std::vector<std::string>{data_val->String()}, std::vector<Tree::Ptr>{}, @@ -372,7 +374,9 @@ void TreeRuleWithDeps( auto result = ExpressionPtr{Expression::map_t{result_stage}}; auto analysis_result = std::make_shared<AnalysedTarget const>( - TargetResult{result, ExpressionPtr{Expression::map_t{}}, result}, + TargetResult{.artifact_stage = result, + .provides = ExpressionPtr{Expression::map_t{}}, + .runfiles = result}, std::vector<ActionDescription::Ptr>{}, std::vector<std::string>{}, std::move(trees), @@ -604,7 +608,8 @@ void InstallRuleWithDeps( auto const& empty_map = Expression::kEmptyMap; auto result = std::make_shared<AnalysedTarget const>( - TargetResult{stage, empty_map, stage}, + TargetResult{ + .artifact_stage = stage, .provides = empty_map, .runfiles = stage}, std::vector<ActionDescription::Ptr>{}, std::vector<std::string>{}, std::vector<Tree::Ptr>{}, @@ -1060,7 +1065,9 @@ void GenericRuleWithDeps( auto const& empty_map = Expression::kEmptyMap; auto result = std::make_shared<AnalysedTarget const>( TargetResult{ - ExpressionPtr{Expression::map_t{artifacts}}, empty_map, empty_map}, + .artifact_stage = ExpressionPtr{Expression::map_t{artifacts}}, + .provides = empty_map, + .runfiles = empty_map}, std::vector<ActionDescription::Ptr>{action}, std::vector<std::string>{}, std::vector<Tree::Ptr>{}, diff --git a/src/buildtool/build_engine/target_map/export.cpp b/src/buildtool/build_engine/target_map/export.cpp index 187a192d..0ba82d23 100644 --- a/src/buildtool/build_engine/target_map/export.cpp +++ b/src/buildtool/build_engine/target_map/export.cpp @@ -53,7 +53,8 @@ void FinalizeExport( } auto deps_info = TargetGraphInformation{ std::make_shared<BuildMaps::Target::ConfiguredTarget>( - BuildMaps::Target::ConfiguredTarget{target, effective_config}), + BuildMaps::Target::ConfiguredTarget{.target = target, + .config = effective_config}), {(*value)->GraphInformation().Node()}, {}, {}}; @@ -61,7 +62,9 @@ void FinalizeExport( std::unordered_set<std::string> vars_set{}; vars_set.insert(vars.begin(), vars.end()); auto analysis_result = std::make_shared<AnalysedTarget const>( - TargetResult{(*value)->Artifacts(), provides, (*value)->RunFiles()}, + TargetResult{.artifact_stage = (*value)->Artifacts(), + .provides = provides, + .runfiles = (*value)->RunFiles()}, std::vector<ActionDescription::Ptr>{}, std::vector<std::string>{}, std::vector<Tree::Ptr>{}, @@ -148,8 +151,8 @@ void ExportRule( if (auto result = entry.ToResult()) { auto deps_info = TargetGraphInformation{ std::make_shared<BuildMaps::Target::ConfiguredTarget>( - BuildMaps::Target::ConfiguredTarget{key.target, - effective_config}), + BuildMaps::Target::ConfiguredTarget{ + .target = key.target, .config = effective_config}), {}, {}, {}}; @@ -200,8 +203,9 @@ void ExportRule( } (*subcaller)( - {BuildMaps::Target::ConfiguredTarget{std::move(*exported_target), - std::move(target_config)}}, + {BuildMaps::Target::ConfiguredTarget{ + .target = std::move(*exported_target), + .config = std::move(target_config)}}, [setter, logger, vars = std::move(*flexible_vars), diff --git a/src/buildtool/build_engine/target_map/result_map.hpp b/src/buildtool/build_engine/target_map/result_map.hpp index f8b66958..6911bf02 100644 --- a/src/buildtool/build_engine/target_map/result_map.hpp +++ b/src/buildtool/build_engine/target_map/result_map.hpp @@ -73,8 +73,10 @@ class ResultTargetMap { bool is_export_target = false) -> AnalysedTargetPtr { auto part = std::hash<BuildMaps::Base::EntityName>{}(name) % width_; std::unique_lock lock{m_[part]}; - auto [entry, inserted] = targets_[part].emplace( - ConfiguredTarget{std::move(name), std::move(conf)}, result); + auto [entry, inserted] = + targets_[part].emplace(ConfiguredTarget{.target = std::move(name), + .config = std::move(conf)}, + result); if (target_cache_key) { cache_targets_[part].emplace(*target_cache_key, entry->second); } @@ -227,20 +229,21 @@ class ResultTargetMap { std::for_each(target.begin(), target.end(), [&](auto const& el) { auto const& actions = el.second->Actions(); if constexpr (kIncludeOrigins) { - std::for_each(actions.begin(), - actions.end(), - [&result, &origin_map](auto const& action) { - auto origins = nlohmann::json::array(); - for (auto const& [ct, count] : - origin_map[action->Id()]) { - origins.push_back(nlohmann::json{ - {"target", ct.target.ToJson()}, - {"subtask", count}, - {"config", ct.config.ToJson()}}); - } - result.actions.emplace_back( - ActionWithOrigin{action, origins}); - }); + std::for_each( + actions.begin(), + actions.end(), + [&result, &origin_map](auto const& action) { + auto origins = nlohmann::json::array(); + for (auto const& [ct, count] : + origin_map[action->Id()]) { + origins.push_back(nlohmann::json{ + {"target", ct.target.ToJson()}, + {"subtask", count}, + {"config", ct.config.ToJson()}}); + } + result.actions.emplace_back(ActionWithOrigin{ + .desc = action, .origin = origins}); + }); } else { std::for_each(actions.begin(), diff --git a/src/buildtool/build_engine/target_map/target_map.cpp b/src/buildtool/build_engine/target_map/target_map.cpp index c61e3670..d5e0c05b 100644 --- a/src/buildtool/build_engine/target_map/target_map.cpp +++ b/src/buildtool/build_engine/target_map/target_map.cpp @@ -199,7 +199,8 @@ struct TargetData { targets.reserve(nodes.size()); for (auto const& node_expr : nodes) { targets.emplace_back(ExpressionPtr{BuildMaps::Base::EntityName{ - BuildMaps::Base::AnonymousTarget{rule_map, node_expr}}}); + BuildMaps::Base::AnonymousTarget{ + .rule_map = rule_map, .target_node = node_expr}}}); } target_exprs.emplace(field_name, targets); } @@ -268,7 +269,8 @@ void withDependencies( declared_and_implicit_count, dependency_values.size(), &anonymous_deps); auto deps_info = TargetGraphInformation{ std::make_shared<BuildMaps::Target::ConfiguredTarget>( - BuildMaps::Target::ConfiguredTarget{key.target, effective_conf}), + BuildMaps::Target::ConfiguredTarget{.target = key.target, + .config = effective_conf}), declared_deps, implicit_deps, anonymous_deps}; @@ -713,10 +715,10 @@ void withDependencies( check_entries( target_fields, is_node, "target_fields", "target node"); - return ExpressionPtr{ - TargetNode{TargetNode::Abstract{type->String(), - std::move(string_fields), - std::move(target_fields)}}}; + return ExpressionPtr{TargetNode{TargetNode::Abstract{ + .node_type = type->String(), + .string_fields = std::move(string_fields), + .target_fields = std::move(target_fields)}}}; }}, {"RESULT", [](auto&& eval, auto const& expr, auto const& env) { auto const& empty_map_exp = Expression::kEmptyMapExpr; @@ -785,7 +787,9 @@ void withDependencies( fmt::format("provides has to be a map, but found {}", provides->ToString())}; } - return ExpressionPtr{TargetResult{artifacts, provides, runfiles}}; + return ExpressionPtr{TargetResult{.artifact_stage = artifacts, + .provides = provides, + .runfiles = runfiles}}; }}}); auto result = rule->Expression()->Evaluate( @@ -1035,11 +1039,12 @@ void withRuleDefinition( } dependency_keys.emplace_back( - BuildMaps::Target::ConfiguredTarget{dep->Name(), - transitioned_config}); + BuildMaps::Target::ConfiguredTarget{ + .target = dep->Name(), .config = transitioned_config}); transition_keys.emplace_back( BuildMaps::Target::ConfiguredTarget{ - dep->Name(), Configuration{transition}}); + .target = dep->Name(), + .config = Configuration{transition}}); } } params.emplace(target_field_name, @@ -1058,11 +1063,11 @@ void withRuleDefinition( } dependency_keys.emplace_back( - BuildMaps::Target::ConfiguredTarget{dep, - transitioned_config}); + BuildMaps::Target::ConfiguredTarget{ + .target = dep, .config = transitioned_config}); transition_keys.emplace_back( BuildMaps::Target::ConfiguredTarget{ - dep, Configuration{transition}}); + .target = dep, .config = Configuration{transition}}); } } } @@ -1128,8 +1133,9 @@ void withRuleDefinition( return; } anon_names.emplace_back(BuildMaps::Base::EntityName{ - BuildMaps::Base::AnonymousTarget{def.rule_map, - node}}); + BuildMaps::Base::AnonymousTarget{ + .rule_map = def.rule_map, + .target_node = node}}); } } @@ -1139,11 +1145,13 @@ void withRuleDefinition( for (auto const& anon : anon_names) { anonymous_keys.emplace_back( BuildMaps::Target::ConfiguredTarget{ - anon->Name(), transitioned_config}); + .target = anon->Name(), + .config = transitioned_config}); transition_keys.emplace_back( BuildMaps::Target::ConfiguredTarget{ - anon->Name(), Configuration{transition}}); + .target = anon->Name(), + .config = Configuration{transition}}); } } @@ -1404,7 +1412,9 @@ void TreeTarget( Expression::map_t{target.name, ExpressionPtr{*known_tree}}}; auto analysis_result = std::make_shared<AnalysedTarget const>( - TargetResult{tree, {}, tree}, + TargetResult{.artifact_stage = tree, + .provides = {}, + .runfiles = tree}, std::vector<ActionDescription::Ptr>{}, std::vector<std::string>{}, std::vector<Tree::Ptr>{}, @@ -1428,23 +1438,25 @@ void TreeTarget( std::vector<ConfiguredTarget> v; for (const auto& x : dir_entries.FilesIterator()) { - v.emplace_back( - ConfiguredTarget{BuildMaps::Base::EntityName{ - target.repository, - dir_name, - x, - BuildMaps::Base::ReferenceType::kFile}, - Configuration{}}); + v.emplace_back(ConfiguredTarget{ + .target = + BuildMaps::Base::EntityName{ + target.repository, + dir_name, + x, + BuildMaps::Base::ReferenceType::kFile}, + .config = Configuration{}}); } for (const auto& x : dir_entries.DirectoriesIterator()) { - v.emplace_back( - ConfiguredTarget{BuildMaps::Base::EntityName{ - target.repository, - dir_name, - x, - BuildMaps::Base::ReferenceType::kTree}, - Configuration{}}); + v.emplace_back(ConfiguredTarget{ + .target = + BuildMaps::Base::EntityName{ + target.repository, + dir_name, + x, + BuildMaps::Base::ReferenceType::kTree}, + .config = Configuration{}}); } (*subcaller)( std::move(v), @@ -1474,7 +1486,9 @@ void TreeTarget( name, ExpressionPtr{ArtifactDescription{tree_id}}}}; auto analysis_result = std::make_shared<AnalysedTarget const>( - TargetResult{tree_map, {}, tree_map}, + TargetResult{.artifact_stage = tree_map, + .provides = {}, + .runfiles = tree_map}, std::vector<ActionDescription::Ptr>{}, std::vector<std::string>{}, std::vector<Tree::Ptr>{tree}, @@ -1505,7 +1519,9 @@ void GlobResult(const std::vector<AnalysedTargetPtr const*>& values, } auto stage = ExpressionPtr{Expression::map_t{result}}; auto target = std::make_shared<AnalysedTarget const>( - TargetResult{stage, Expression::kEmptyMap, stage}, + TargetResult{.artifact_stage = stage, + .provides = Expression::kEmptyMap, + .runfiles = stage}, std::vector<ActionDescription::Ptr>{}, std::vector<std::string>{}, std::vector<Tree::Ptr>{}, diff --git a/src/buildtool/build_engine/target_map/utils.cpp b/src/buildtool/build_engine/target_map/utils.cpp index 050749de..c0932dc9 100644 --- a/src/buildtool/build_engine/target_map/utils.cpp +++ b/src/buildtool/build_engine/target_map/utils.cpp @@ -45,7 +45,7 @@ auto BuildMaps::Target::Utils::obtainTargetByName( } auto transition = eval(expr->Get("transition", empty_map_exp), env); auto it = deps_by_transition.find(BuildMaps::Target::ConfiguredTarget{ - *target, Configuration{transition}}); + .target = *target, .config = Configuration{transition}}); if (it == deps_by_transition.end()) { throw Evaluator::EvaluationError{fmt::format( "Reference to undeclared dependency {} in transition {}", @@ -70,7 +70,7 @@ auto BuildMaps::Target::Utils::obtainTarget( } auto transition = eval(expr->Get("transition", empty_map_exp), env); auto it = deps_by_transition.find(BuildMaps::Target::ConfiguredTarget{ - reference->Name(), Configuration{transition}}); + .target = reference->Name(), .config = Configuration{transition}}); if (it == deps_by_transition.end()) { throw Evaluator::EvaluationError{fmt::format( "Reference to undeclared dependency {} in transition {}", diff --git a/src/buildtool/common/artifact.hpp b/src/buildtool/common/artifact.hpp index eb5be3a3..3a593f5b 100644 --- a/src/buildtool/common/artifact.hpp +++ b/src/buildtool/common/artifact.hpp @@ -82,8 +82,9 @@ class Artifact { std::size_t size = std::stoul(size_str); auto const& object_type = FromChar(*type.c_str()); return ObjectInfo{ - ArtifactDigest{id, size, IsTreeObject(object_type)}, - object_type}; + .digest = + ArtifactDigest{id, size, IsTreeObject(object_type)}, + .type = object_type}; } catch (std::out_of_range const& e) { Logger::Log(LogLevel::Debug, "size raised out_of_range exception."); @@ -100,10 +101,11 @@ class Artifact { j["size"].is_number() and j["type"].is_string()) { auto const& object_type = FromChar(*(j["type"].get<std::string>().c_str())); - return ObjectInfo{ArtifactDigest{j["id"].get<std::string>(), - j["size"].get<std::size_t>(), - IsTreeObject(object_type)}, - object_type}; + return ObjectInfo{ + .digest = ArtifactDigest{j["id"].get<std::string>(), + j["size"].get<std::size_t>(), + IsTreeObject(object_type)}, + .type = object_type}; } return std::nullopt; } @@ -159,8 +161,9 @@ class Artifact { void SetObjectInfo(ObjectInfo const& object_info, bool fail_info) const noexcept { if (fail_info) { - object_info_ = - ObjectInfo{object_info.digest, object_info.type, true}; + object_info_ = ObjectInfo{.digest = object_info.digest, + .type = object_info.type, + .failed = true}; } else { object_info_ = object_info; @@ -170,7 +173,8 @@ class Artifact { void SetObjectInfo(ArtifactDigest const& digest, ObjectType type, bool failed) const noexcept { - object_info_ = ObjectInfo{digest, type, failed}; + object_info_ = + ObjectInfo{.digest = digest, .type = type, .failed = failed}; } [[nodiscard]] static auto CreateLocalArtifact( diff --git a/src/buildtool/execution_api/bazel_msg/bazel_msg_factory.cpp b/src/buildtool/execution_api/bazel_msg/bazel_msg_factory.cpp index 5f392483..ba52443b 100644 --- a/src/buildtool/execution_api/bazel_msg/bazel_msg_factory.cpp +++ b/src/buildtool/execution_api/bazel_msg/bazel_msg_factory.cpp @@ -349,15 +349,16 @@ template <class T> [[nodiscard]] auto CreateObjectInfo(bazel_re::DirectoryNode const& node) -> Artifact::ObjectInfo { - return Artifact::ObjectInfo{ArtifactDigest{node.digest()}, - ObjectType::Tree}; + return Artifact::ObjectInfo{.digest = ArtifactDigest{node.digest()}, + .type = ObjectType::Tree}; } [[nodiscard]] auto CreateObjectInfo(bazel_re::FileNode const& node) -> Artifact::ObjectInfo { - return Artifact::ObjectInfo{ - ArtifactDigest{node.digest()}, - node.is_executable() ? ObjectType::Executable : ObjectType::File}; + return Artifact::ObjectInfo{.digest = ArtifactDigest{node.digest()}, + .type = node.is_executable() + ? ObjectType::Executable + : ObjectType::File}; } /// \brief Convert `DirectoryTree` to `DirectoryNodeBundle`. @@ -445,12 +446,13 @@ auto BazelMsgFactory::ReadObjectInfosFromGitTree( for (auto const& [raw_id, es] : entries) { auto const hex_id = ToHexString(raw_id); for (auto const& entry : es) { - if (not store_info(entry.name, - Artifact::ObjectInfo{ - ArtifactDigest{hex_id, - /*size is unknown*/ 0, - IsTreeObject(entry.type)}, - entry.type})) { + if (not store_info( + entry.name, + Artifact::ObjectInfo{ + .digest = ArtifactDigest{hex_id, + /*size is unknown*/ 0, + IsTreeObject(entry.type)}, + .type = entry.type})) { return false; } } diff --git a/src/buildtool/execution_api/git/git_api.hpp b/src/buildtool/execution_api/git/git_api.hpp index 2844d492..acbab788 100644 --- a/src/buildtool/execution_api/git/git_api.hpp +++ b/src/buildtool/execution_api/git/git_api.hpp @@ -59,10 +59,11 @@ class GitApi final : public IExecutionApi { for (auto const& [path, entry] : *tree) { if (not RetrieveToPaths( {Artifact::ObjectInfo{ - ArtifactDigest{ - entry->Hash(), /*size*/ 0, entry->IsTree()}, - entry->Type(), - false}}, + .digest = ArtifactDigest{entry->Hash(), + /*size*/ 0, + entry->IsTree()}, + .type = entry->Type(), + .failed = false}}, {output_paths[i] / path})) { return false; } @@ -111,10 +112,11 @@ class GitApi final : public IExecutionApi { for (auto const& [path, entry] : *tree) { json[path] = Artifact::ObjectInfo{ - ArtifactDigest{ - entry->Hash(), /*size*/ 0, entry->IsTree()}, - entry->Type(), - false} + .digest = + ArtifactDigest{ + entry->Hash(), /*size*/ 0, entry->IsTree()}, + .type = entry->Type(), + .failed = false} .ToString(/*size_unknown*/ true); } auto msg = json.dump(2) + "\n"; diff --git a/src/buildtool/execution_api/local/local_response.hpp b/src/buildtool/execution_api/local/local_response.hpp index 2875ec16..7faa5619 100644 --- a/src/buildtool/execution_api/local/local_response.hpp +++ b/src/buildtool/execution_api/local/local_response.hpp @@ -76,10 +76,10 @@ class LocalResponse final : public IExecutionResponse { try { artifacts.emplace( file.path(), - Artifact::ObjectInfo{ArtifactDigest{file.digest()}, - file.is_executable() - ? ObjectType::Executable - : ObjectType::File}); + Artifact::ObjectInfo{ + .digest = ArtifactDigest{file.digest()}, + .type = file.is_executable() ? ObjectType::Executable + : ObjectType::File}); } catch (...) { return {}; } @@ -90,8 +90,9 @@ class LocalResponse final : public IExecutionResponse { try { artifacts.emplace( dir.path(), - Artifact::ObjectInfo{ArtifactDigest{dir.tree_digest()}, - ObjectType::Tree}); + Artifact::ObjectInfo{ + .digest = ArtifactDigest{dir.tree_digest()}, + .type = ObjectType::Tree}); } catch (...) { return {}; } diff --git a/src/buildtool/execution_api/remote/bazel/bazel_execution_client.hpp b/src/buildtool/execution_api/remote/bazel/bazel_execution_client.hpp index a528eecb..7f683132 100644 --- a/src/buildtool/execution_api/remote/bazel/bazel_execution_client.hpp +++ b/src/buildtool/execution_api/remote/bazel/bazel_execution_client.hpp @@ -47,8 +47,9 @@ class BazelExecutionClient { std::optional<ExecutionOutput> output{std::nullopt}; static auto MakeEmptyFailed() -> ExecutionResponse { - return ExecutionResponse{ - {}, ExecutionResponse::State::Failed, std::nullopt}; + return ExecutionResponse{.execution_handle = {}, + .state = ExecutionResponse::State::Failed, + .output = std::nullopt}; } }; diff --git a/src/buildtool/execution_api/remote/bazel/bazel_response.cpp b/src/buildtool/execution_api/remote/bazel/bazel_response.cpp index d45d9aa1..9889d8ed 100644 --- a/src/buildtool/execution_api/remote/bazel/bazel_response.cpp +++ b/src/buildtool/execution_api/remote/bazel/bazel_response.cpp @@ -51,11 +51,12 @@ auto BazelResponse::Artifacts() const noexcept -> ArtifactInfos { // collect files and store them for (auto const& file : action_result.output_files()) { try { - artifacts.emplace(file.path(), - Artifact::ObjectInfo{ - ArtifactDigest{file.digest()}, - file.is_executable() ? ObjectType::Executable - : ObjectType::File}); + artifacts.emplace( + file.path(), + Artifact::ObjectInfo{.digest = ArtifactDigest{file.digest()}, + .type = file.is_executable() + ? ObjectType::Executable + : ObjectType::File}); } catch (...) { return {}; } @@ -68,8 +69,9 @@ auto BazelResponse::Artifacts() const noexcept -> ArtifactInfos { try { artifacts.emplace( tree.path(), - Artifact::ObjectInfo{ArtifactDigest{tree.tree_digest()}, - ObjectType::Tree}); + Artifact::ObjectInfo{ + .digest = ArtifactDigest{tree.tree_digest()}, + .type = ObjectType::Tree}); } catch (...) { return {}; } @@ -109,7 +111,8 @@ auto BazelResponse::Artifacts() const noexcept -> ArtifactInfos { } artifacts.emplace( action_result.output_directories(pos).path(), - Artifact::ObjectInfo{*root_digest, ObjectType::Tree}); + Artifact::ObjectInfo{.digest = *root_digest, + .type = ObjectType::Tree}); } catch (...) { return {}; } diff --git a/src/buildtool/execution_engine/executor/executor.hpp b/src/buildtool/execution_engine/executor/executor.hpp index aa6635ba..f239c381 100644 --- a/src/buildtool/execution_engine/executor/executor.hpp +++ b/src/buildtool/execution_engine/executor/executor.hpp @@ -399,7 +399,8 @@ class ExecutorImpl { IsExecutableObject(*object_type)}}})) { return std::nullopt; } - return Artifact::ObjectInfo{std::move(digest), *object_type}; + return Artifact::ObjectInfo{.digest = std::move(digest), + .type = *object_type}; } /// \brief Add digests and object type to artifact nodes for all outputs of diff --git a/src/buildtool/file_system/git_repo.cpp b/src/buildtool/file_system/git_repo.cpp index 968978b5..01db8269 100644 --- a/src/buildtool/file_system/git_repo.cpp +++ b/src/buildtool/file_system/git_repo.cpp @@ -1250,7 +1250,7 @@ auto GitRepo::ReadTreeData(std::string const& data, -> std::optional<tree_entries_t> { #ifndef BOOTSTRAP_BUILD_TOOL try { - InMemoryODBBackend b{kInMemoryODBParent}; + InMemoryODBBackend b{.parent = kInMemoryODBParent}; auto cas = std::make_shared<GitCAS>(); if (auto raw_id = is_hex_id ? FromHexString(id) : std::make_optional(id)) { @@ -1285,7 +1285,7 @@ auto GitRepo::CreateShallowTree(tree_entries_t const& entries) noexcept -> std::optional<std::pair<std::string, std::string>> { #ifndef BOOTSTRAP_BUILD_TOOL try { - InMemoryODBBackend b{kInMemoryODBParent, &entries}; + InMemoryODBBackend b{.parent = kInMemoryODBParent, .entries = &entries}; auto cas = std::make_shared<GitCAS>(); // create a GitCAS from a special-purpose in-memory object database. git_odb* odb_ptr{nullptr}; diff --git a/src/buildtool/graph_traverser/graph_traverser.hpp b/src/buildtool/graph_traverser/graph_traverser.hpp index cc2ecfa1..48f5c281 100644 --- a/src/buildtool/graph_traverser/graph_traverser.hpp +++ b/src/buildtool/graph_traverser/graph_traverser.hpp @@ -136,9 +136,10 @@ class GraphTraverser { artifact_nodes, runfile_descriptions); MaybePrintToStdout(rel_paths, artifact_nodes); - return BuildResult{std::move(std::get<0>(*artifacts)), - std::move(infos), - failed_artifacts}; + return BuildResult{ + .output_paths = std::move(std::get<0>(*artifacts)), + .extra_infos = std::move(infos), + .failed_artifacts = failed_artifacts}; } if (clargs_.stage->remember) { @@ -158,7 +159,9 @@ class GraphTraverser { MaybePrintToStdout(rel_paths, artifact_nodes); - return BuildResult{*output_paths, std::move(infos), failed_artifacts}; + return BuildResult{.output_paths = *output_paths, + .extra_infos = std::move(infos), + .failed_artifacts = failed_artifacts}; } /// \brief Parses graph description into graph, traverses it and retrieves diff --git a/src/buildtool/main/analyse.cpp b/src/buildtool/main/analyse.cpp index ab88685d..96972703 100644 --- a/src/buildtool/main/analyse.cpp +++ b/src/buildtool/main/analyse.cpp @@ -108,7 +108,9 @@ void DetectAndReportPending(std::string const& name, auto provides_exp = Expression::FromJson(provides); return std::make_shared<AnalysedTarget const>( - TargetResult{inputs_exp, provides_exp, Expression::kEmptyMap}, + TargetResult{.artifact_stage = inputs_exp, + .provides = provides_exp, + .runfiles = Expression::kEmptyMap}, std::vector<ActionDescription::Ptr>{action}, target->Blobs(), target->Trees(), @@ -249,5 +251,5 @@ void DetectAndReportPending(std::string const& name, } } } - return AnalysisResult{id, target, modified}; + return AnalysisResult{.id = id, .target = target, .modified = modified}; } diff --git a/src/buildtool/main/install_cas.cpp b/src/buildtool/main/install_cas.cpp index 4566a1bb..cdeca553 100644 --- a/src/buildtool/main/install_cas.cpp +++ b/src/buildtool/main/install_cas.cpp @@ -57,7 +57,8 @@ namespace { size_str.empty() ? 0 : std::atol(size_str.c_str())); auto const& object_type = FromChar(*type.c_str()); return Artifact::ObjectInfo{ - ArtifactDigest{id, size, IsTreeObject(object_type)}, object_type}; + .digest = ArtifactDigest{id, size, IsTreeObject(object_type)}, + .type = object_type}; } #ifndef BOOTSTRAP_BUILD_TOOL diff --git a/src/buildtool/main/main.cpp b/src/buildtool/main/main.cpp index 498507b1..3dee0096 100644 --- a/src/buildtool/main/main.cpp +++ b/src/buildtool/main/main.cpp @@ -576,7 +576,8 @@ void SetupHashFunction() { if (not entity) { std::exit(kExitFailure); } - return Target::ConfiguredTarget{std::move(*entity), std::move(config)}; + return Target::ConfiguredTarget{.target = std::move(*entity), + .config = std::move(config)}; } auto const target_file = (std::filesystem::path{current_module} / target_file_name).string(); @@ -608,9 +609,9 @@ void SetupHashFunction() { std::exit(kExitFailure); } return Target::ConfiguredTarget{ - Base::EntityName{ - Base::NamedTarget{main_repo, current_module, json.begin().key()}}, - std::move(config)}; + .target = Base::EntityName{Base::NamedTarget{ + main_repo, current_module, json.begin().key()}}, + .config = std::move(config)}; } [[nodiscard]] auto DetermineWorkspaceRootByLookingForMarkers() noexcept diff --git a/src/buildtool/storage/target_cache_entry.cpp b/src/buildtool/storage/target_cache_entry.cpp index 6e1f3187..e06d0caa 100644 --- a/src/buildtool/storage/target_cache_entry.cpp +++ b/src/buildtool/storage/target_cache_entry.cpp @@ -26,8 +26,9 @@ auto TargetCacheEntry::FromTarget( AnalysedTargetPtr const& target, std::unordered_map<ArtifactDescription, Artifact::ObjectInfo> const& replacements) noexcept -> std::optional<TargetCacheEntry> { - auto result = TargetResult{ - target->Artifacts(), target->Provides(), target->RunFiles()}; + auto result = TargetResult{.artifact_stage = target->Artifacts(), + .provides = target->Provides(), + .runfiles = target->RunFiles()}; if (auto desc = result.ReplaceNonKnownAndToJson(replacements)) { return TargetCacheEntry{*desc}; } diff --git a/src/buildtool/system/system_command.hpp b/src/buildtool/system/system_command.hpp index 13655730..660d9202 100644 --- a/src/buildtool/system/system_command.hpp +++ b/src/buildtool/system/system_command.hpp @@ -119,9 +119,9 @@ class SystemCommand { if (auto const err = OpenFile(stderr_file)) { if (auto retval = ForkAndExecute( cmd, envp, cwd, fileno(out.get()), fileno(err.get()))) { - return ExecOutput{*retval, - std::move(stdout_file), - std::move(stderr_file)}; + return ExecOutput{.return_value = *retval, + .stdout_file = std::move(stdout_file), + .stderr_file = std::move(stderr_file)}; } } else { |