diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/buildtool/build_engine/target_map/absent_target_map.cpp | 21 | ||||
-rw-r--r-- | src/buildtool/build_engine/target_map/absent_target_map.hpp | 7 | ||||
-rw-r--r-- | src/buildtool/main/TARGETS | 2 | ||||
-rw-r--r-- | src/buildtool/main/analyse.cpp | 7 | ||||
-rw-r--r-- | src/buildtool/main/analyse.hpp | 5 |
5 files changed, 33 insertions, 9 deletions
diff --git a/src/buildtool/build_engine/target_map/absent_target_map.cpp b/src/buildtool/build_engine/target_map/absent_target_map.cpp index 2aad0b99..3110f863 100644 --- a/src/buildtool/build_engine/target_map/absent_target_map.cpp +++ b/src/buildtool/build_engine/target_map/absent_target_map.cpp @@ -35,7 +35,8 @@ void WithFlexibleVariables( const BuildMaps::Target::AbsentTargetMap::LoggerPtr& logger, const gsl::not_null<BuildMaps::Target::ResultTargetMap*> result_map, gsl::not_null<Statistics*> const& stats, - gsl::not_null<Progress*> const& exports_progress) { + gsl::not_null<Progress*> const& exports_progress, + BuildMaps::Target::ServeFailureLogReporter* serve_failure_reporter) { auto effective_config = key.config.Prune(flexible_vars); if (key.config != effective_config) { (*subcaller)( @@ -89,6 +90,9 @@ void WithFlexibleVariables( return; } if (res->index() == 0) { + if (serve_failure_reporter != nullptr) { + (*serve_failure_reporter)(key, std::get<0>(*res)); + } (*logger)(fmt::format("Failure to remotely analyse or build absent " "target {}\nDetailed log available on the " "remote-execution endpoint as blob {}", @@ -201,10 +205,17 @@ auto BuildMaps::Target::CreateAbsentTargetMap( gsl::not_null<RepositoryConfig*> const& repo_config, gsl::not_null<Statistics*> const& stats, gsl::not_null<Progress*> const& exports_progress, - std::size_t jobs) -> AbsentTargetMap { + std::size_t jobs, + BuildMaps::Target::ServeFailureLogReporter* serve_failure_reporter) + -> AbsentTargetMap { #ifndef BOOTSTRAP_BUILD_TOOL auto target_reader = - [result_map, repo_config, stats, exports_progress, absent_variables]( + [result_map, + repo_config, + stats, + exports_progress, + absent_variables, + serve_failure_reporter]( auto ts, auto setter, auto logger, auto subcaller, auto key) { // assumptions: // - target with absent targets file requested @@ -230,6 +241,7 @@ auto BuildMaps::Target::CreateAbsentTargetMap( setter, repo_config, logger, + serve_failure_reporter, result_map, stats, exports_progress, @@ -242,7 +254,8 @@ auto BuildMaps::Target::CreateAbsentTargetMap( logger, result_map, stats, - exports_progress); + exports_progress, + serve_failure_reporter); }, [logger, target = key.target](auto const& msg, auto fatal) { (*logger)(fmt::format("While requested the flexible " diff --git a/src/buildtool/build_engine/target_map/absent_target_map.hpp b/src/buildtool/build_engine/target_map/absent_target_map.hpp index a3f92889..4980519a 100644 --- a/src/buildtool/build_engine/target_map/absent_target_map.hpp +++ b/src/buildtool/build_engine/target_map/absent_target_map.hpp @@ -16,6 +16,7 @@ #define INCLUDED_SRC_BUILDTOOL_BUILD_ENGINE_TARGET_MAP_ABSENT_TARGET_MAP_HPP #include <cstddef> +#include <functional> #include <string> #include <vector> @@ -46,6 +47,8 @@ struct AbsentTargetDescription { using AbsentTargetMap = AsyncMapConsumer<ConfiguredTarget, AnalysedTargetPtr>; using AbsentTargetVariablesMap = AsyncMapConsumer<AbsentTargetDescription, std::vector<std::string>>; +using ServeFailureLogReporter = + std::function<void(ConfiguredTarget, std::string)>; auto CreateAbsentTargetVariablesMap(std::size_t jobs = 0) -> AbsentTargetVariablesMap; @@ -55,7 +58,9 @@ auto CreateAbsentTargetMap(const gsl::not_null<ResultTargetMap*>&, gsl::not_null<RepositoryConfig*> const& repo_config, gsl::not_null<Statistics*> const& stats, gsl::not_null<Progress*> const& exports_progress, - std::size_t jobs = 0) -> AbsentTargetMap; + std::size_t jobs = 0, + ServeFailureLogReporter* serve_failure_reporter = + nullptr) -> AbsentTargetMap; } // namespace BuildMaps::Target diff --git a/src/buildtool/main/TARGETS b/src/buildtool/main/TARGETS index 602e31b8..4f439201 100644 --- a/src/buildtool/main/TARGETS +++ b/src/buildtool/main/TARGETS @@ -152,6 +152,7 @@ [ ["@", "gsl", "", "gsl"] , ["src/buildtool/common", "cli"] , ["src/buildtool/common", "common"] + , ["src/buildtool/build_engine/target_map", "absent_target_map"] , ["src/buildtool/build_engine/target_map", "configured_target"] , ["src/buildtool/build_engine/target_map", "result_map"] , ["src/buildtool/build_engine/analysed_target", "target"] @@ -170,7 +171,6 @@ , ["src/buildtool/build_engine/base_maps", "rule_map"] , ["src/buildtool/build_engine/base_maps", "source_map"] , ["src/buildtool/build_engine/base_maps", "targets_file_map"] - , ["src/buildtool/build_engine/target_map", "absent_target_map"] , ["src/buildtool/build_engine/target_map", "target_map"] , ["src/buildtool/logging", "log_level"] , ["src/buildtool/progress_reporting", "exports_progress_reporter"] diff --git a/src/buildtool/main/analyse.cpp b/src/buildtool/main/analyse.cpp index 506000bb..78aee957 100644 --- a/src/buildtool/main/analyse.cpp +++ b/src/buildtool/main/analyse.cpp @@ -101,7 +101,9 @@ namespace Target = BuildMaps::Target; gsl::not_null<Statistics*> const& stats, std::size_t jobs, std::optional<std::string> const& request_action_input, - Logger const* logger) -> std::optional<AnalysisResult> { + Logger const* logger, + BuildMaps::Target::ServeFailureLogReporter* serve_log) + -> std::optional<AnalysisResult> { // create progress tracker for export targets Progress exports_progress{}; // create async maps @@ -124,7 +126,8 @@ namespace Target = BuildMaps::Target; repo_config, stats, &exports_progress, - jobs); + jobs, + serve_log); auto target_map = Target::CreateTargetMap(&source_targets, &targets_file_map, &rule_map, diff --git a/src/buildtool/main/analyse.hpp b/src/buildtool/main/analyse.hpp index f93e0dda..267c99b8 100644 --- a/src/buildtool/main/analyse.hpp +++ b/src/buildtool/main/analyse.hpp @@ -21,6 +21,7 @@ #include "gsl/gsl" #include "src/buildtool/build_engine/analysed_target/analysed_target.hpp" +#include "src/buildtool/build_engine/target_map/absent_target_map.hpp" #include "src/buildtool/build_engine/target_map/configured_target.hpp" #include "src/buildtool/build_engine/target_map/result_map.hpp" #include "src/buildtool/common/cli.hpp" @@ -43,5 +44,7 @@ struct AnalysisResult { gsl::not_null<Statistics*> const& stats, std::size_t jobs, std::optional<std::string> const& request_action_input, - Logger const* logger = nullptr) -> std::optional<AnalysisResult>; + Logger const* logger = nullptr, + BuildMaps::Target::ServeFailureLogReporter* = nullptr) + -> std::optional<AnalysisResult>; #endif |