diff options
Diffstat (limited to 'src/buildtool/build_engine/target_map/export.cpp')
-rw-r--r-- | src/buildtool/build_engine/target_map/export.cpp | 40 |
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 |