diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/buildtool/main/TARGETS | 7 | ||||
-rw-r--r-- | src/buildtool/main/analyse.cpp | 16 | ||||
-rw-r--r-- | src/buildtool/main/analyse.hpp | 2 | ||||
-rw-r--r-- | src/buildtool/main/diagnose.cpp | 15 | ||||
-rw-r--r-- | src/buildtool/main/diagnose.hpp | 2 | ||||
-rw-r--r-- | src/buildtool/main/main.cpp | 58 | ||||
-rw-r--r-- | src/buildtool/serve_api/serve_service/target.cpp | 32 |
7 files changed, 68 insertions, 64 deletions
diff --git a/src/buildtool/main/TARGETS b/src/buildtool/main/TARGETS index 6ee7c829..4185c339 100644 --- a/src/buildtool/main/TARGETS +++ b/src/buildtool/main/TARGETS @@ -257,11 +257,7 @@ , "hdrs": ["diagnose.hpp"] , "srcs": ["diagnose.cpp"] , "stage": ["src", "buildtool", "main"] - , "deps": - [ "analyse" - , ["src/buildtool/build_engine/target_map", "result_map"] - , ["src/buildtool/common", "cli"] - ] + , "deps": ["analyse", ["src/buildtool/common", "cli"]] , "private-deps": [ ["@", "fmt", "", "fmt"] , ["@", "gsl", "", "gsl"] @@ -271,6 +267,7 @@ , ["src/buildtool/build_engine/expression", "expression"] , ["src/buildtool/build_engine/expression", "expression_ptr_interface"] , ["src/buildtool/build_engine/target_map", "configured_target"] + , ["src/buildtool/build_engine/target_map", "result_map"] , ["src/buildtool/logging", "log_level"] , ["src/buildtool/logging", "logging"] , ["src/utils/cpp", "json"] diff --git a/src/buildtool/main/analyse.cpp b/src/buildtool/main/analyse.cpp index 025fb1a9..dcb2181b 100644 --- a/src/buildtool/main/analyse.cpp +++ b/src/buildtool/main/analyse.cpp @@ -23,6 +23,7 @@ #include <memory> #include <thread> #include <unordered_map> +#include <utility> #include <vector> #include "fmt/core.h" @@ -121,7 +122,6 @@ namespace Target = BuildMaps::Target; [[nodiscard]] auto AnalyseTarget( gsl::not_null<AnalyseContext*> const& context, const Target::ConfiguredTarget& id, - gsl::not_null<Target::ResultTargetMap*> const& result_map, std::size_t jobs, std::optional<std::string> const& request_action_input, Logger const* logger, @@ -147,8 +147,9 @@ namespace Target = BuildMaps::Target; auto absent_target_variables_map = Target::CreateAbsentTargetVariablesMap(context, jobs); + BuildMaps::Target::ResultTargetMap result_map{jobs}; auto absent_target_map = Target::CreateAbsentTargetMap( - context, result_map, &absent_target_variables_map, jobs, serve_log); + context, &result_map, &absent_target_variables_map, jobs, serve_log); auto target_map = Target::CreateTargetMap(context, &source_targets, @@ -156,7 +157,7 @@ namespace Target = BuildMaps::Target; &rule_map, &directory_entries, &absent_target_map, - result_map, + &result_map, jobs); Logger::Log( logger, LogLevel::Info, "Requested target is {}", id.ToString()); @@ -240,7 +241,7 @@ namespace Target = BuildMaps::Target; if (request_action_input) { if (request_action_input->starts_with("%")) { auto action_id = request_action_input->substr(1); - auto action = result_map->GetAction(action_id); + auto action = result_map.GetAction(action_id); if (action) { Logger::Log(logger, LogLevel::Info, @@ -278,7 +279,7 @@ namespace Target = BuildMaps::Target; } } else { - auto action = result_map->GetAction(*request_action_input); + auto action = result_map.GetAction(*request_action_input); if (action) { Logger::Log(logger, LogLevel::Info, @@ -309,5 +310,8 @@ namespace Target = BuildMaps::Target; } } } - return AnalysisResult{.id = id, .target = target, .modified = modified}; + return AnalysisResult{.id = id, + .target = target, + .result_map = std::move(result_map), + .modified = modified}; } diff --git a/src/buildtool/main/analyse.hpp b/src/buildtool/main/analyse.hpp index b608850c..771d06ad 100644 --- a/src/buildtool/main/analyse.hpp +++ b/src/buildtool/main/analyse.hpp @@ -30,13 +30,13 @@ struct AnalysisResult { BuildMaps::Target::ConfiguredTarget id; AnalysedTargetPtr target; + BuildMaps::Target::ResultTargetMap result_map; std::optional<std::string> modified; }; [[nodiscard]] auto AnalyseTarget( gsl::not_null<AnalyseContext*> const& context, const BuildMaps::Target::ConfiguredTarget& id, - gsl::not_null<BuildMaps::Target::ResultTargetMap*> const& result_map, std::size_t jobs, std::optional<std::string> const& request_action_input, Logger const* logger = nullptr, diff --git a/src/buildtool/main/diagnose.cpp b/src/buildtool/main/diagnose.cpp index 8cc198d9..9e67551f 100644 --- a/src/buildtool/main/diagnose.cpp +++ b/src/buildtool/main/diagnose.cpp @@ -37,6 +37,7 @@ #include "src/buildtool/build_engine/expression/expression_ptr.hpp" #include "src/buildtool/build_engine/expression/target_result.hpp" #include "src/buildtool/build_engine/target_map/configured_target.hpp" +#include "src/buildtool/build_engine/target_map/result_map.hpp" #include "src/buildtool/logging/log_level.hpp" #include "src/buildtool/logging/logger.hpp" #include "src/utils/cpp/json.hpp" @@ -325,7 +326,6 @@ void DumpResult(std::string const& file_path, AnalysisResult const& result) { } // namespace void DiagnoseResults(AnalysisResult const& result, - BuildMaps::Target::ResultTargetMap const& result_map, DiagnosticArguments const& clargs) { Logger::Log( LogLevel::Info, @@ -358,14 +358,16 @@ void DiagnoseResults(AnalysisResult const& result, DumpVars(*clargs.dump_vars, result); } if (clargs.dump_targets) { - DumpTargets(*clargs.dump_targets, result_map.ConfiguredTargets()); + DumpTargets(*clargs.dump_targets, + result.result_map.ConfiguredTargets()); } if (clargs.dump_export_targets) { - DumpTargets( - *clargs.dump_export_targets, result_map.ExportTargets(), "export "); + DumpTargets(*clargs.dump_export_targets, + result.result_map.ExportTargets(), + "export "); } if (clargs.dump_targets_graph) { - auto graph = result_map.ConfiguredTargetsGraph().dump(2); + auto graph = result.result_map.ConfiguredTargetsGraph().dump(2); Logger::Log(LogLevel::Info, "Dumping graph of configured-targets to file {}.", *clargs.dump_targets_graph); @@ -373,7 +375,8 @@ void DiagnoseResults(AnalysisResult const& result, os << graph << std::endl; } if (clargs.dump_anonymous) { - DumpAnonymous(*clargs.dump_anonymous, result_map.ConfiguredTargets()); + DumpAnonymous(*clargs.dump_anonymous, + result.result_map.ConfiguredTargets()); } if (clargs.dump_nodes) { DumpNodes(*clargs.dump_nodes, result); diff --git a/src/buildtool/main/diagnose.hpp b/src/buildtool/main/diagnose.hpp index cb3d57a6..0a6d0ec4 100644 --- a/src/buildtool/main/diagnose.hpp +++ b/src/buildtool/main/diagnose.hpp @@ -15,11 +15,9 @@ #ifndef INCLUDED_SRC_BUILDTOOL_MAIN_DIAGNOSE_HPP #define INCLUDED_SRC_BUILDTOOL_MAIN_DIAGNOSE_HPP -#include "src/buildtool/build_engine/target_map/result_map.hpp" #include "src/buildtool/common/cli.hpp" #include "src/buildtool/main/analyse.hpp" void DiagnoseResults(AnalysisResult const& result, - BuildMaps::Target::ResultTargetMap const& result_map, DiagnosticArguments const& clargs); #endif // INCLUDED_SRC_BUILDTOOL_MAIN_DIAGNOSE_HPP diff --git a/src/buildtool/main/main.cpp b/src/buildtool/main/main.cpp index 0aaac54a..d14c429c 100644 --- a/src/buildtool/main/main.cpp +++ b/src/buildtool/main/main.cpp @@ -1090,7 +1090,6 @@ auto main(int argc, char* argv[]) -> int { } #endif // BOOTSTRAP_BUILD_TOOL - BuildMaps::Target::ResultTargetMap result_map{arguments.common.jobs}; auto id = ReadConfiguredTarget( main_repo, main_ws_root, &repo_config, arguments.analysis); auto serve_errors = nlohmann::json::array(); @@ -1115,13 +1114,13 @@ auto main(int argc, char* argv[]) -> int { .progress = &exports_progress, .serve = serve ? &*serve : nullptr}; - auto result = AnalyseTarget(&analyse_ctx, - id, - &result_map, - arguments.common.jobs, - arguments.analysis.request_action_input, - /*logger=*/nullptr, - &collect_serve_errors); + auto analyse_result = + AnalyseTarget(&analyse_ctx, + id, + arguments.common.jobs, + arguments.analysis.request_action_input, + /*logger=*/nullptr, + &collect_serve_errors); if (arguments.analysis.serve_errors_file) { Logger::Log(serve_errors.empty() ? LogLevel::Debug : LogLevel::Info, "Dumping serve-error information to {}", @@ -1129,11 +1128,11 @@ auto main(int argc, char* argv[]) -> int { std::ofstream os(*arguments.analysis.serve_errors_file); os << serve_errors.dump() << std::endl; } - if (result) { - Logger::Log( - LogLevel::Info, - "Analysed target {}", - result->id.ToShortString(Evaluator::GetExpressionLogLimit())); + if (analyse_result) { + Logger::Log(LogLevel::Info, + "Analysed target {}", + analyse_result->id.ToShortString( + Evaluator::GetExpressionLogLimit())); { auto cached = stats.ExportsCachedCounter(); @@ -1153,15 +1152,15 @@ auto main(int argc, char* argv[]) -> int { } if (arguments.analysis.graph_file) { - result_map.ToFile( + analyse_result->result_map.ToFile( *arguments.analysis.graph_file, &stats, &progress); } if (arguments.analysis.graph_file_plain) { - result_map.ToFile</*kIncludeOrigins=*/false>( + analyse_result->result_map.ToFile</*kIncludeOrigins=*/false>( *arguments.analysis.graph_file_plain, &stats, &progress); } auto const [artifacts, runfiles] = - ReadOutputArtifacts(result->target); + ReadOutputArtifacts(analyse_result->target); if (arguments.analysis.artifacts_to_build_file) { DumpArtifactsToBuild( artifacts, @@ -1169,38 +1168,41 @@ auto main(int argc, char* argv[]) -> int { *arguments.analysis.artifacts_to_build_file); } if (arguments.cmd == SubCommand::kAnalyse) { - DiagnoseResults(*result, result_map, arguments.diagnose); - ReportTaintedness(*result); + DiagnoseResults(*analyse_result, arguments.diagnose); + ReportTaintedness(*analyse_result); // Clean up in parallel { TaskSystem ts{arguments.common.jobs}; - result_map.Clear(&ts); + analyse_result->result_map.Clear(&ts); } return kExitSuccess; } #ifndef BOOTSTRAP_BUILD_TOOL - ReportTaintedness(*result); + ReportTaintedness(*analyse_result); auto const& [actions, blobs, trees] = - result_map.ToResult(&stats, &progress); + analyse_result->result_map.ToResult(&stats, &progress); // collect cache targets and artifacts for target-level caching - auto const cache_targets = result_map.CacheTargets(); + auto const cache_targets = + analyse_result->result_map.CacheTargets(); auto cache_artifacts = CollectNonKnownArtifacts(cache_targets); - // Clean up result map, now that it is no longer needed + // Clean up analyse_result map, now that it is no longer needed { TaskSystem ts{arguments.common.jobs}; - result_map.Clear(&ts); + analyse_result->result_map.Clear(&ts); } Logger::Log( LogLevel::Info, "{}ing{} {}.", arguments.cmd == SubCommand::kRebuild ? "Rebuild" : "Build", - result->modified - ? fmt::format(" input of action {} of", *(result->modified)) + analyse_result->modified + ? fmt::format(" input of action {} of", + *(analyse_result->modified)) : "", - result->id.ToShortString(Evaluator::GetExpressionLogLimit())); + analyse_result->id.ToShortString( + Evaluator::GetExpressionLogLimit())); auto build_result = traverser.BuildAndStage(artifacts, @@ -1223,7 +1225,7 @@ auto main(int argc, char* argv[]) -> int { // Repeat taintedness message to make the user aware that // the artifacts are not for production use. - ReportTaintedness(*result); + ReportTaintedness(*analyse_result); if (build_result->failed_artifacts) { Logger::Log(LogLevel::Warning, "Build result contains failed artifacts."); diff --git a/src/buildtool/serve_api/serve_service/target.cpp b/src/buildtool/serve_api/serve_service/target.cpp index 977d7ed7..ff0acfa5 100644 --- a/src/buildtool/serve_api/serve_service/target.cpp +++ b/src/buildtool/serve_api/serve_service/target.cpp @@ -450,7 +450,6 @@ auto TargetService::ServeTarget( error_msg}; } - BuildMaps::Target::ResultTargetMap result_map{serve_config_.jobs}; auto configured_target = BuildMaps::Target::ConfiguredTarget{ .target = std::move(*entity), .config = std::move(config)}; @@ -477,37 +476,38 @@ auto TargetService::ServeTarget( .serve = serve_}; // analyse the configured target - auto result = AnalyseTarget(&analyse_ctx, - configured_target, - &result_map, - serve_config_.jobs, - std::nullopt /*request_action_input*/, - &logger); - - if (not result) { + auto analyse_result = AnalyseTarget(&analyse_ctx, + configured_target, + serve_config_.jobs, + std::nullopt /*request_action_input*/, + &logger); + + if (not analyse_result) { // report failure locally, to keep track of it... auto msg = fmt::format("Failed to analyse target {}", configured_target.target.ToString()); logger_->Emit(LogLevel::Warning, "{}", msg); return HandleFailureLog(tmp_log, "analysis", response); } - logger_->Emit(LogLevel::Info, "Analysed target {}", result->id.ToString()); + logger_->Emit( + LogLevel::Info, "Analysed target {}", analyse_result->id.ToString()); // get the output artifacts - auto const [artifacts, runfiles] = ReadOutputArtifacts(result->target); + auto const [artifacts, runfiles] = + ReadOutputArtifacts(analyse_result->target); - // get the result map outputs + // get the analyse_result map outputs auto const& [actions, blobs, trees] = - result_map.ToResult(&stats, &progress, &logger); + analyse_result->result_map.ToResult(&stats, &progress, &logger); // collect cache targets and artifacts for target-level caching - auto const cache_targets = result_map.CacheTargets(); + auto const cache_targets = analyse_result->result_map.CacheTargets(); auto cache_artifacts = CollectNonKnownArtifacts(cache_targets); - // Clean up result map, now that it is no longer needed + // Clean up analyse_result map, now that it is no longer needed { TaskSystem ts{serve_config_.jobs}; - result_map.Clear(&ts); + analyse_result->result_map.Clear(&ts); } auto jobs = serve_config_.build_jobs; |