summaryrefslogtreecommitdiff
path: root/src/buildtool/computed_roots/evaluate.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/buildtool/computed_roots/evaluate.cpp')
-rw-r--r--src/buildtool/computed_roots/evaluate.cpp28
1 files changed, 26 insertions, 2 deletions
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;
}