summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/buildtool/build_engine/target_map/absent_target_map.cpp21
-rw-r--r--src/buildtool/build_engine/target_map/absent_target_map.hpp7
-rw-r--r--src/buildtool/main/TARGETS2
-rw-r--r--src/buildtool/main/analyse.cpp7
-rw-r--r--src/buildtool/main/analyse.hpp5
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