summaryrefslogtreecommitdiff
path: root/src/buildtool/execution_engine
diff options
context:
space:
mode:
Diffstat (limited to 'src/buildtool/execution_engine')
-rw-r--r--src/buildtool/execution_engine/dag/dag.cpp2
-rw-r--r--src/buildtool/execution_engine/dag/dag.hpp35
-rw-r--r--src/buildtool/execution_engine/executor/executor.hpp14
3 files changed, 30 insertions, 21 deletions
diff --git a/src/buildtool/execution_engine/dag/dag.cpp b/src/buildtool/execution_engine/dag/dag.cpp
index 17f4b3af..cb82ec55 100644
--- a/src/buildtool/execution_engine/dag/dag.cpp
+++ b/src/buildtool/execution_engine/dag/dag.cpp
@@ -148,7 +148,7 @@ auto DependencyGraph::AddAction(ActionDescription const& description) -> bool {
auto DependencyGraph::AddAction(Action const& a) noexcept
-> DependencyGraph::ActionNodeIdentifier {
- auto id = a.Id();
+ auto const& id = a.Id();
auto const action_it = action_ids_.find(id);
if (action_it != action_ids_.end()) {
return action_it->second;
diff --git a/src/buildtool/execution_engine/dag/dag.hpp b/src/buildtool/execution_engine/dag/dag.hpp
index 99a35f4b..7e2194ff 100644
--- a/src/buildtool/execution_engine/dag/dag.hpp
+++ b/src/buildtool/execution_engine/dag/dag.hpp
@@ -314,57 +314,60 @@ class DependencyGraph : DirectedAcyclicGraph {
return true;
}
- [[nodiscard]] auto OutputFiles()
- const& -> std::vector<NamedOtherNodePtr> const& {
+ [[nodiscard]] auto OutputFiles() const& noexcept
+ -> std::vector<NamedOtherNodePtr> const& {
return output_files_;
}
- [[nodiscard]] auto OutputDirs()
- const& -> std::vector<NamedOtherNodePtr> const& {
+ [[nodiscard]] auto OutputDirs() const& noexcept
+ -> std::vector<NamedOtherNodePtr> const& {
return output_dirs_;
}
- [[nodiscard]] auto Dependencies()
- const& -> std::vector<NamedOtherNodePtr> const& {
+ [[nodiscard]] auto Dependencies() const& noexcept
+ -> std::vector<NamedOtherNodePtr> const& {
return dependencies_;
}
- [[nodiscard]] auto Command() const -> std::vector<std::string> {
+ [[nodiscard]] auto Command() const noexcept
+ -> std::vector<std::string> const& {
return Content().Command();
}
- [[nodiscard]] auto Env() const -> std::map<std::string, std::string> {
+ [[nodiscard]] auto Env() const noexcept
+ -> std::map<std::string, std::string> const& {
return Content().Env();
}
- [[nodiscard]] auto MayFail() const -> std::optional<std::string> {
+ [[nodiscard]] auto MayFail() const noexcept
+ -> std::optional<std::string> const& {
return Content().MayFail();
}
- [[nodiscard]] auto TimeoutScale() const -> double {
+ [[nodiscard]] auto TimeoutScale() const noexcept -> double {
return Content().TimeoutScale();
}
- [[nodiscard]] auto ExecutionProperties() const
- -> std::map<std::string, std::string> {
+ [[nodiscard]] auto ExecutionProperties() const noexcept
+ -> std::map<std::string, std::string> const& {
return Content().ExecutionProperties();
}
- [[nodiscard]] auto NoCache() const -> bool {
+ [[nodiscard]] auto NoCache() const noexcept -> bool {
return Content().NoCache();
}
- [[nodiscard]] auto OutputFilePaths() const
+ [[nodiscard]] auto OutputFilePaths() const noexcept
-> std::vector<Action::LocalPath> {
return NodePaths(output_files_);
}
- [[nodiscard]] auto OutputDirPaths() const
+ [[nodiscard]] auto OutputDirPaths() const noexcept
-> std::vector<Action::LocalPath> {
return NodePaths(output_dirs_);
}
- [[nodiscard]] auto DependencyPaths() const
+ [[nodiscard]] auto DependencyPaths() const noexcept
-> std::vector<Action::LocalPath> {
return NodePaths(dependencies_);
}
diff --git a/src/buildtool/execution_engine/executor/executor.hpp b/src/buildtool/execution_engine/executor/executor.hpp
index d0bc7aee..097284e1 100644
--- a/src/buildtool/execution_engine/executor/executor.hpp
+++ b/src/buildtool/execution_engine/executor/executor.hpp
@@ -972,11 +972,17 @@ class Rebuilder {
return artifacts_cached.error();
}
std::ostringstream msg{};
- for (auto const& [path, info] : *artifacts.value()) {
- auto const& info_cached = artifacts_cached.value()->at(path);
- if (info != info_cached) {
- RecordFlakyAction(&msg, action, path, info, info_cached);
+ try {
+ for (auto const& [path, info] : *artifacts.value()) {
+ auto const& info_cached =
+ artifacts_cached.value()->at(path);
+ if (info != info_cached) {
+ RecordFlakyAction(
+ &msg, action, path, info, info_cached);
+ }
}
+ } catch (std::exception const& ex) {
+ return ex.what();
}
if (msg.tellp() > 0) {
stats.IncrementActionsFlakyCounter();