summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKlaus Aehlig <klaus.aehlig@huawei.com>2024-11-27 10:57:12 +0100
committerKlaus Aehlig <klaus.aehlig@huawei.com>2024-11-28 11:03:36 +0100
commit1579cdaf7f12e9010a47f9bbb9ca6a3ec5601f71 (patch)
tree188c0163930a4f8be0cecd351282bcd5014cd93c /src
parent0678be33057f01b94900628a3a26872ca24b2f30 (diff)
downloadjustbuild-1579cdaf7f12e9010a47f9bbb9ca6a3ec5601f71.tar.gz
computed roots: properly report failure to materialize roots
Diffstat (limited to 'src')
-rw-r--r--src/buildtool/computed_roots/TARGETS1
-rw-r--r--src/buildtool/computed_roots/evaluate.cpp28
2 files changed, 27 insertions, 2 deletions
diff --git a/src/buildtool/computed_roots/TARGETS b/src/buildtool/computed_roots/TARGETS
index 46f9ea0b..208711df 100644
--- a/src/buildtool/computed_roots/TARGETS
+++ b/src/buildtool/computed_roots/TARGETS
@@ -78,6 +78,7 @@
, ["src/buildtool/logging", "logging"]
, ["src/buildtool/main", "analyse_context"]
, ["src/buildtool/multithreading", "async_map_consumer"]
+ , ["src/buildtool/multithreading", "async_map_utils"]
, ["src/buildtool/multithreading", "task_system"]
, ["src/buildtool/progress_reporting", "base_progress_reporter"]
, ["src/buildtool/progress_reporting", "progress"]
diff --git a/src/buildtool/computed_roots/evaluate.cpp b/src/buildtool/computed_roots/evaluate.cpp
index 06beccec..202fc7d1 100644
--- a/src/buildtool/computed_roots/evaluate.cpp
+++ b/src/buildtool/computed_roots/evaluate.cpp
@@ -51,6 +51,7 @@
#include "src/buildtool/logging/logger.hpp"
#include "src/buildtool/main/analyse_context.hpp"
#include "src/buildtool/multithreading/async_map_consumer.hpp"
+#include "src/buildtool/multithreading/async_map_utils.hpp"
#include "src/buildtool/multithreading/task_system.hpp"
#include "src/buildtool/progress_reporting/base_progress_reporter.hpp"
#include "src/buildtool/progress_reporting/progress.hpp"
@@ -498,12 +499,13 @@ auto EvaluateComputedRoots(
&repo_config_access,
&git_access);
bool failed = false;
+ bool done = false;
{
TaskSystem ts{jobs};
root_map.ConsumeAfterKeysReady(
&ts,
roots,
- [&roots](auto values) {
+ [&roots, &done](auto values) {
Logger::Log(LogLevel::Progress,
"Computed roots evaluted, {} top level",
roots.size());
@@ -517,6 +519,7 @@ auto EvaluateComputedRoots(
}
return msg.str();
});
+ done = true;
},
[&failed](auto const& msg, bool fatal) {
Logger::Log(
@@ -528,7 +531,28 @@ auto EvaluateComputedRoots(
);
}
- return (not failed);
+ if (failed) {
+ return false;
+ }
+ if (not done) {
+ const std::function<std::string(FileRoot::ComputedRoot const&)>
+ k_root_printer =
+ [](FileRoot::ComputedRoot const& x) -> std::string {
+ return x.ToString();
+ };
+
+ auto cycle_msg = DetectAndReportCycle(
+ "computed roots", root_map, k_root_printer);
+ if (cycle_msg) {
+ Logger::Log(LogLevel::Error, "{}", *cycle_msg);
+ }
+ else {
+ DetectAndReportPending(
+ "computed roots", root_map, k_root_printer);
+ }
+ return false;
+ }
+ return true;
}
return true;
}