summaryrefslogtreecommitdiff
path: root/src/buildtool/build_engine/target_map/export.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/buildtool/build_engine/target_map/export.cpp')
-rw-r--r--src/buildtool/build_engine/target_map/export.cpp40
1 files changed, 36 insertions, 4 deletions
diff --git a/src/buildtool/build_engine/target_map/export.cpp b/src/buildtool/build_engine/target_map/export.cpp
index 3ed86dd1..b8b5b1db 100644
--- a/src/buildtool/build_engine/target_map/export.cpp
+++ b/src/buildtool/build_engine/target_map/export.cpp
@@ -135,11 +135,43 @@ void ExportRule(
auto task = fmt::format(
"[{},{}]", key.target.ToString(), effective_config.ToString());
exports_progress->TaskTracker().Start(task);
-
- target_cache_value =
- ServeApi::ServeTarget(*target_cache_key, *repo_key);
+ auto res = ServeApi::ServeTarget(*target_cache_key, *repo_key);
+ // process response from serve endpoint
+ if (not res) {
+ // target not found: log to performance, and continue
+ Logger::Log(LogLevel::Performance,
+ "Export target {} not known to serve endpoint",
+ key.target.ToString());
+ }
+ else {
+ if (res->index() == 0) {
+ // target found but failed to analyse/build: this should be
+ // a fatal error for the local build too
+ (*logger)(
+ fmt::format("Failure to remotely analyse or build "
+ "target {}\nDetailed log available on the "
+ "remote-execution endpoint as blob {}",
+ key.target.ToString(),
+ std::get<0>(*res)),
+ /*fatal=*/true);
+ return;
+ }
+ if (res->index() == 1) {
+ // some other failure occurred while querying the serve
+ // endpoint; log to debug and continue locally
+ Logger::Log(LogLevel::Debug,
+ "While querying serve endpoint for export "
+ "target {}:\n{}",
+ key.target.ToString(),
+ std::get<1>(*res));
+ }
+ else {
+ // index == 2
+ target_cache_value = std::get<2>(*res);
+ from_just_serve = true;
+ }
+ }
exports_progress->TaskTracker().Stop(task);
- from_just_serve = true;
}
#endif // BOOTSTRAP_BUILD_TOOL