diff options
author | Klaus Aehlig <klaus.aehlig@huawei.com> | 2024-11-27 10:57:12 +0100 |
---|---|---|
committer | Klaus Aehlig <klaus.aehlig@huawei.com> | 2024-11-28 11:03:36 +0100 |
commit | 1579cdaf7f12e9010a47f9bbb9ca6a3ec5601f71 (patch) | |
tree | 188c0163930a4f8be0cecd351282bcd5014cd93c /src | |
parent | 0678be33057f01b94900628a3a26872ca24b2f30 (diff) | |
download | justbuild-1579cdaf7f12e9010a47f9bbb9ca6a3ec5601f71.tar.gz |
computed roots: properly report failure to materialize roots
Diffstat (limited to 'src')
-rw-r--r-- | src/buildtool/computed_roots/TARGETS | 1 | ||||
-rw-r--r-- | src/buildtool/computed_roots/evaluate.cpp | 28 |
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; } |