summaryrefslogtreecommitdiff
path: root/src/buildtool/main/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/buildtool/main/main.cpp')
-rw-r--r--src/buildtool/main/main.cpp39
1 files changed, 31 insertions, 8 deletions
diff --git a/src/buildtool/main/main.cpp b/src/buildtool/main/main.cpp
index 21f08618..59225fc7 100644
--- a/src/buildtool/main/main.cpp
+++ b/src/buildtool/main/main.cpp
@@ -17,6 +17,7 @@
#include <filesystem>
#include <fstream>
#include <iostream>
+#include <mutex>
#include <optional>
#include <string>
#include <unordered_map>
@@ -1017,14 +1018,36 @@ auto main(int argc, char* argv[]) -> int {
arguments.common.jobs};
auto id = ReadConfiguredTarget(
main_repo, main_ws_root, &repo_config, arguments.analysis);
- auto result =
- AnalyseTarget(id,
- &result_map,
- &repo_config,
- Storage::Instance().TargetCache(),
- &stats,
- arguments.common.jobs,
- arguments.analysis.request_action_input);
+ auto serve_errors = nlohmann::json::array();
+ std::mutex serve_errors_access{};
+ BuildMaps::Target::ServeFailureLogReporter collect_serve_errors =
+ [&serve_errors, &serve_errors_access](auto target, auto blob) {
+ std::unique_lock lock(serve_errors_access);
+ auto target_desc = nlohmann::json::array();
+ target_desc.push_back(target.target.ToJson());
+ target_desc.push_back(target.config.ToJson());
+ auto entry = nlohmann::json::array();
+ entry.push_back(target_desc);
+ entry.push_back(blob);
+ serve_errors.push_back(entry);
+ };
+ auto result = AnalyseTarget(id,
+ &result_map,
+ &repo_config,
+ Storage::Instance().TargetCache(),
+ &stats,
+ 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 {}",
+ arguments.analysis.serve_errors_file->string());
+ std::ofstream os(*arguments.analysis.serve_errors_file);
+ os << serve_errors.dump() << std::endl;
+ }
if (result) {
if (arguments.analysis.graph_file) {
result_map.ToFile(