summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/buildtool/build_engine/analysed_target/TARGETS1
-rw-r--r--src/buildtool/build_engine/analysed_target/analysed_target.hpp12
-rw-r--r--src/buildtool/build_engine/base_maps/TARGETS1
-rw-r--r--src/buildtool/build_engine/base_maps/source_map.cpp2
-rw-r--r--src/buildtool/build_engine/target_map/TARGETS2
-rw-r--r--src/buildtool/build_engine/target_map/absent_target_map.cpp2
-rw-r--r--src/buildtool/build_engine/target_map/built_in_rules.cpp6
-rw-r--r--src/buildtool/build_engine/target_map/export.cpp3
-rw-r--r--src/buildtool/build_engine/target_map/result_map.hpp48
-rw-r--r--src/buildtool/build_engine/target_map/target_map.cpp6
-rw-r--r--src/buildtool/main/analyse.cpp1
-rw-r--r--test/buildtool/build_engine/target_map/TARGETS1
-rw-r--r--test/buildtool/build_engine/target_map/result_map.test.cpp2
13 files changed, 80 insertions, 7 deletions
diff --git a/src/buildtool/build_engine/analysed_target/TARGETS b/src/buildtool/build_engine/analysed_target/TARGETS
index 8d524e08..70b8a89a 100644
--- a/src/buildtool/build_engine/analysed_target/TARGETS
+++ b/src/buildtool/build_engine/analysed_target/TARGETS
@@ -9,6 +9,7 @@
, ["src/buildtool/common", "action_description"]
, ["src/buildtool/common", "artifact_description"]
, ["src/buildtool/common", "tree"]
+ , ["src/buildtool/common", "tree_overlay"]
]
, "stage": ["src", "buildtool", "build_engine", "analysed_target"]
, "private-deps":
diff --git a/src/buildtool/build_engine/analysed_target/analysed_target.hpp b/src/buildtool/build_engine/analysed_target/analysed_target.hpp
index 419db910..8971b5fe 100644
--- a/src/buildtool/build_engine/analysed_target/analysed_target.hpp
+++ b/src/buildtool/build_engine/analysed_target/analysed_target.hpp
@@ -29,6 +29,7 @@
#include "src/buildtool/common/action_description.hpp"
#include "src/buildtool/common/artifact_description.hpp"
#include "src/buildtool/common/tree.hpp"
+#include "src/buildtool/common/tree_overlay.hpp"
class AnalysedTarget {
public:
@@ -36,6 +37,7 @@ class AnalysedTarget {
std::vector<ActionDescription::Ptr> actions,
std::vector<std::string> blobs,
std::vector<Tree::Ptr> trees,
+ std::vector<TreeOverlay::Ptr> tree_overlays,
std::unordered_set<std::string> vars,
std::set<std::string> tainted,
std::set<std::string> implied_export_targets,
@@ -44,6 +46,7 @@ class AnalysedTarget {
actions_{std::move(actions)},
blobs_{std::move(blobs)},
trees_{std::move(trees)},
+ tree_overlays_{std::move(tree_overlays)},
vars_{std::move(vars)},
tainted_{std::move(tainted)},
implied_export_targets_{std::move(implied_export_targets)},
@@ -86,6 +89,14 @@ class AnalysedTarget {
-> std::vector<Tree::Ptr> const& {
return trees_;
}
+ [[nodiscard]] auto TreeOverlays() && noexcept
+ -> std::vector<TreeOverlay::Ptr> {
+ return std::move(tree_overlays_);
+ }
+ [[nodiscard]] auto TreeOverlays() const& noexcept
+ -> std::vector<TreeOverlay::Ptr> const& {
+ return tree_overlays_;
+ }
[[nodiscard]] auto Blobs() && noexcept -> std::vector<std::string> {
return std::move(blobs_);
}
@@ -133,6 +144,7 @@ class AnalysedTarget {
std::vector<ActionDescription::Ptr> actions_;
std::vector<std::string> blobs_;
std::vector<Tree::Ptr> trees_;
+ std::vector<TreeOverlay::Ptr> tree_overlays_;
std::unordered_set<std::string> vars_;
std::set<std::string> tainted_;
std::set<std::string> implied_export_targets_;
diff --git a/src/buildtool/build_engine/base_maps/TARGETS b/src/buildtool/build_engine/base_maps/TARGETS
index 92febe84..dad59e53 100644
--- a/src/buildtool/build_engine/base_maps/TARGETS
+++ b/src/buildtool/build_engine/base_maps/TARGETS
@@ -101,6 +101,7 @@
, ["src/buildtool/build_engine/expression", "expression_ptr_interface"]
, ["src/buildtool/common", "action_description"]
, ["src/buildtool/common", "tree"]
+ , ["src/buildtool/common", "tree_overlay"]
]
}
, "field_reader":
diff --git a/src/buildtool/build_engine/base_maps/source_map.cpp b/src/buildtool/build_engine/base_maps/source_map.cpp
index 2ac79131..7a057f1b 100644
--- a/src/buildtool/build_engine/base_maps/source_map.cpp
+++ b/src/buildtool/build_engine/base_maps/source_map.cpp
@@ -32,6 +32,7 @@
#include "src/buildtool/build_engine/expression/target_result.hpp"
#include "src/buildtool/common/action_description.hpp"
#include "src/buildtool/common/tree.hpp"
+#include "src/buildtool/common/tree_overlay.hpp"
#include "src/buildtool/multithreading/async_map_consumer.hpp"
namespace BuildMaps::Base {
@@ -49,6 +50,7 @@ auto as_target(const BuildMaps::Base::EntityName& key,
std::vector<ActionDescription::Ptr>{},
std::vector<std::string>{},
std::vector<Tree::Ptr>{},
+ std::vector<TreeOverlay::Ptr>{},
std::unordered_set<std::string>{},
std::set<std::string>{},
std::set<std::string>{},
diff --git a/src/buildtool/build_engine/target_map/TARGETS b/src/buildtool/build_engine/target_map/TARGETS
index 5684f5c7..6cffebbb 100644
--- a/src/buildtool/build_engine/target_map/TARGETS
+++ b/src/buildtool/build_engine/target_map/TARGETS
@@ -75,6 +75,7 @@
, ["src/buildtool/common", "config"]
, ["src/buildtool/common", "statistics"]
, ["src/buildtool/common", "tree"]
+ , ["src/buildtool/common", "tree_overlay"]
, ["src/buildtool/crypto", "hash_function"]
, ["src/buildtool/crypto", "hasher"]
, ["src/buildtool/file_system", "file_root"]
@@ -137,6 +138,7 @@
, ["src/buildtool/common", "config"]
, ["src/buildtool/common", "statistics"]
, ["src/buildtool/common", "tree"]
+ , ["src/buildtool/common", "tree_overlay"]
, ["src/buildtool/logging", "log_level"]
, ["src/buildtool/logging", "logging"]
, ["src/buildtool/progress_reporting", "progress"]
diff --git a/src/buildtool/build_engine/target_map/absent_target_map.cpp b/src/buildtool/build_engine/target_map/absent_target_map.cpp
index 8de5a97a..14e51e06 100644
--- a/src/buildtool/build_engine/target_map/absent_target_map.cpp
+++ b/src/buildtool/build_engine/target_map/absent_target_map.cpp
@@ -32,6 +32,7 @@
#include "src/buildtool/common/repository_config.hpp"
#include "src/buildtool/common/statistics.hpp"
#include "src/buildtool/common/tree.hpp"
+#include "src/buildtool/common/tree_overlay.hpp"
#include "src/buildtool/logging/log_level.hpp"
#include "src/buildtool/logging/logger.hpp"
#include "src/buildtool/progress_reporting/progress.hpp"
@@ -167,6 +168,7 @@ void WithFlexibleVariables(
std::vector<ActionDescription::Ptr>{},
std::vector<std::string>{},
std::vector<Tree::Ptr>{},
+ std::vector<TreeOverlay::Ptr>{},
std::unordered_set<std::string>{flexible_vars.begin(),
flexible_vars.end()},
std::set<std::string>{},
diff --git a/src/buildtool/build_engine/target_map/built_in_rules.cpp b/src/buildtool/build_engine/target_map/built_in_rules.cpp
index ec25a785..00a10efe 100644
--- a/src/buildtool/build_engine/target_map/built_in_rules.cpp
+++ b/src/buildtool/build_engine/target_map/built_in_rules.cpp
@@ -52,6 +52,7 @@
#include "src/buildtool/common/artifact_digest_factory.hpp"
#include "src/buildtool/common/repository_config.hpp"
#include "src/buildtool/common/tree.hpp"
+#include "src/buildtool/common/tree_overlay.hpp"
#include "src/buildtool/file_system/object_type.hpp"
#include "src/buildtool/storage/storage.hpp"
#include "src/utils/cpp/path.hpp"
@@ -301,6 +302,7 @@ void BlobGenRuleWithDeps(
std::vector<ActionDescription::Ptr>{},
std::vector<std::string>{data_val->String()},
std::vector<Tree::Ptr>{},
+ std::vector<TreeOverlay::Ptr>{},
std::move(vars_set),
std::move(tainted),
std::move(implied_export),
@@ -543,6 +545,7 @@ void TreeRuleWithDeps(
std::vector<ActionDescription::Ptr>{},
std::vector<std::string>{},
std::move(trees),
+ std::vector<TreeOverlay::Ptr>{},
std::move(vars_set),
std::move(tainted),
std::move(implied_export),
@@ -802,6 +805,7 @@ void InstallRuleWithDeps(
std::vector<ActionDescription::Ptr>{},
std::vector<std::string>{},
std::vector<Tree::Ptr>{},
+ std::vector<TreeOverlay::Ptr>{},
std::move(effective_vars),
std::move(tainted),
std::move(implied_export),
@@ -1431,6 +1435,7 @@ void GenericRuleWithDeps(
std::vector<ActionDescription::Ptr>{action},
std::vector<std::string>{},
std::move(trees),
+ std::vector<TreeOverlay::Ptr>{},
std::move(effective_vars),
std::move(tainted),
std::move(implied_export),
@@ -1643,6 +1648,7 @@ void ConfigureRule(
std::vector<ActionDescription::Ptr>{},
std::vector<std::string>{},
std::vector<Tree::Ptr>{},
+ std::vector<TreeOverlay::Ptr>{},
std::move(vars_set),
tainted,
configured_target->ImpliedExport(),
diff --git a/src/buildtool/build_engine/target_map/export.cpp b/src/buildtool/build_engine/target_map/export.cpp
index 3433ff4c..0bbe5ac6 100644
--- a/src/buildtool/build_engine/target_map/export.cpp
+++ b/src/buildtool/build_engine/target_map/export.cpp
@@ -41,6 +41,7 @@
#include "src/buildtool/common/repository_config.hpp"
#include "src/buildtool/common/statistics.hpp"
#include "src/buildtool/common/tree.hpp"
+#include "src/buildtool/common/tree_overlay.hpp"
#include "src/buildtool/logging/log_level.hpp"
#include "src/buildtool/logging/logger.hpp"
#include "src/buildtool/progress_reporting/progress.hpp"
@@ -107,6 +108,7 @@ void FinalizeExport(
std::vector<ActionDescription::Ptr>{},
std::vector<std::string>{},
std::vector<Tree::Ptr>{},
+ std::vector<TreeOverlay::Ptr>{},
std::move(vars_set),
std::set<std::string>{},
std::move(implied),
@@ -253,6 +255,7 @@ void ExportRule(
std::vector<ActionDescription::Ptr>{},
std::vector<std::string>{},
std::vector<Tree::Ptr>{},
+ std::vector<TreeOverlay::Ptr>{},
std::unordered_set<std::string>{flexible_vars->begin(),
flexible_vars->end()},
std::set<std::string>{},
diff --git a/src/buildtool/build_engine/target_map/result_map.hpp b/src/buildtool/build_engine/target_map/result_map.hpp
index 6b5295c2..d38a1d7a 100644
--- a/src/buildtool/build_engine/target_map/result_map.hpp
+++ b/src/buildtool/build_engine/target_map/result_map.hpp
@@ -99,6 +99,7 @@ class ResultTargetMap {
num_actions_[part] += entry->second->Actions().size();
num_blobs_[part] += entry->second->Blobs().size();
num_trees_[part] += entry->second->Trees().size();
+ num_tree_overlays_[part] += entry->second->TreeOverlays().size();
}
return entry->second;
}
@@ -189,14 +190,17 @@ class ResultTargetMap {
std::size_t na = 0;
std::size_t nb = 0;
std::size_t nt = 0;
+ std::size_t nto = 0;
for (std::size_t i = 0; i < width_; i++) {
na += num_actions_[i];
nb += num_blobs_[i];
nt += num_trees_[i];
+ nto += num_tree_overlays_[i];
}
result.actions.reserve(na);
result.blobs.reserve(nb);
result.trees.reserve(nt);
+ result.tree_overlays.reserve(nto);
auto& origin_map = progress->OriginMap();
origin_map.clear();
@@ -268,10 +272,14 @@ class ResultTargetMap {
}
auto const& blobs = el.second->Blobs();
auto const& trees = el.second->Trees();
+ auto const& tree_overlays = el.second->TreeOverlays();
result.blobs.insert(
result.blobs.end(), blobs.begin(), blobs.end());
result.trees.insert(
result.trees.end(), trees.begin(), trees.end());
+ result.tree_overlays.insert(result.tree_overlays.end(),
+ tree_overlays.begin(),
+ tree_overlays.end());
});
}
@@ -289,6 +297,17 @@ class ResultTargetMap {
[](auto left, auto right) { return left->Id() == right->Id(); });
result.trees.erase(lasttree, result.trees.end());
+ std::sort(
+ result.tree_overlays.begin(),
+ result.tree_overlays.end(),
+ [](auto left, auto right) { return left->Id() < right->Id(); });
+ auto lasttree_overlay = std::unique(
+ result.tree_overlays.begin(),
+ result.tree_overlays.end(),
+ [](auto left, auto right) { return left->Id() == right->Id(); });
+ result.tree_overlays.erase(lasttree_overlay,
+ result.tree_overlays.end());
+
std::sort(result.actions.begin(),
result.actions.end(),
[](auto left, auto right) {
@@ -344,12 +363,14 @@ class ResultTargetMap {
"Analysed {} non-known source trees",
trees_traversed);
}
- Logger::Log(logger,
- LogLevel::Info,
- "Discovered {} actions, {} trees, {} blobs",
- result.actions.size(),
- result.trees.size(),
- result.blobs.size());
+ Logger::Log(
+ logger,
+ LogLevel::Info,
+ "Discovered {} actions, {} tree overlays, {} trees, {} blobs",
+ result.actions.size(),
+ result.tree_overlays.size(),
+ result.trees.size(),
+ result.blobs.size());
return result;
}
@@ -362,6 +383,7 @@ class ResultTargetMap {
auto const result = ToResult<kIncludeOrigins>(stats, progress, logger);
auto actions = nlohmann::json::object();
auto trees = nlohmann::json::object();
+ auto tree_overlays = nlohmann::json::object();
std::for_each(result.actions.begin(),
result.actions.end(),
[&actions](auto const& action) {
@@ -379,8 +401,18 @@ class ResultTargetMap {
result.trees.begin(),
result.trees.end(),
[&trees](auto const& tree) { trees[tree->Id()] = tree->ToJson(); });
- return nlohmann::json{
+ std::for_each(result.tree_overlays.begin(),
+ result.tree_overlays.end(),
+ [&tree_overlays](auto const& tree_overlay) {
+ tree_overlays[tree_overlay->Id()] =
+ tree_overlay->ToJson();
+ });
+ auto json = nlohmann::json{
{"actions", actions}, {"blobs", result.blobs}, {"trees", trees}};
+ if (not tree_overlays.empty()) {
+ json["tree_overlays"] = tree_overlays;
+ }
+ return json;
}
template <bool kIncludeOrigins = true>
@@ -427,6 +459,8 @@ class ResultTargetMap {
std::vector<std::size_t> num_actions_{std::vector<std::size_t>(width_)};
std::vector<std::size_t> num_blobs_{std::vector<std::size_t>(width_)};
std::vector<std::size_t> num_trees_{std::vector<std::size_t>(width_)};
+ std::vector<std::size_t> num_tree_overlays_{
+ std::vector<std::size_t>(width_)};
constexpr static auto ComputeWidth(std::size_t jobs) -> std::size_t {
if (jobs <= 0) {
diff --git a/src/buildtool/build_engine/target_map/target_map.cpp b/src/buildtool/build_engine/target_map/target_map.cpp
index e714aabb..634db0dc 100644
--- a/src/buildtool/build_engine/target_map/target_map.cpp
+++ b/src/buildtool/build_engine/target_map/target_map.cpp
@@ -61,6 +61,7 @@
#include "src/buildtool/common/repository_config.hpp"
#include "src/buildtool/common/statistics.hpp"
#include "src/buildtool/common/tree.hpp"
+#include "src/buildtool/common/tree_overlay.hpp"
#include "src/buildtool/crypto/hash_function.hpp"
#include "src/buildtool/file_system/file_root.hpp"
#include "src/buildtool/file_system/object_type.hpp"
@@ -1043,6 +1044,7 @@ void withDependencies(
std::move(actions),
std::move(blobs),
std::move(trees),
+ std::vector<TreeOverlay::Ptr>{},
std::move(effective_vars),
std::move(tainted),
std::move(implied_export),
@@ -1575,6 +1577,7 @@ void withTargetNode(
{},
{},
{},
+ {},
TargetGraphInformation::kSource}));
}
else {
@@ -1678,6 +1681,7 @@ void TreeTarget(
std::vector<ActionDescription::Ptr>{},
std::vector<std::string>{},
std::vector<Tree::Ptr>{},
+ std::vector<TreeOverlay::Ptr>{},
std::unordered_set<std::string>{},
std::set<std::string>{},
std::set<std::string>{},
@@ -1766,6 +1770,7 @@ void TreeTarget(
std::vector<ActionDescription::Ptr>{},
std::vector<std::string>{},
std::vector<Tree::Ptr>{tree},
+ std::vector<TreeOverlay::Ptr>{},
std::unordered_set<std::string>{},
std::set<std::string>{},
std::set<std::string>{},
@@ -1800,6 +1805,7 @@ void GlobResult(const std::vector<AnalysedTargetPtr const*>& values,
std::vector<ActionDescription::Ptr>{},
std::vector<std::string>{},
std::vector<Tree::Ptr>{},
+ std::vector<TreeOverlay::Ptr>{},
std::unordered_set<std::string>{},
std::set<std::string>{},
std::set<std::string>{},
diff --git a/src/buildtool/main/analyse.cpp b/src/buildtool/main/analyse.cpp
index dcb2181b..9315d5b7 100644
--- a/src/buildtool/main/analyse.cpp
+++ b/src/buildtool/main/analyse.cpp
@@ -111,6 +111,7 @@ namespace Target = BuildMaps::Target;
std::vector<ActionDescription::Ptr>{action},
target->Blobs(),
target->Trees(),
+ target->TreeOverlays(),
target->Vars(),
target->Tainted(),
target->ImpliedExport(),
diff --git a/test/buildtool/build_engine/target_map/TARGETS b/test/buildtool/build_engine/target_map/TARGETS
index ede3b41c..e477393e 100644
--- a/test/buildtool/build_engine/target_map/TARGETS
+++ b/test/buildtool/build_engine/target_map/TARGETS
@@ -23,6 +23,7 @@
, ["@", "src", "src/buildtool/common", "common"]
, ["@", "src", "src/buildtool/common", "statistics"]
, ["@", "src", "src/buildtool/common", "tree"]
+ , ["@", "src", "src/buildtool/common", "tree_overlay"]
, ["@", "src", "src/buildtool/file_system", "file_system_manager"]
, ["@", "src", "src/buildtool/progress_reporting", "progress"]
, ["", "catch-main"]
diff --git a/test/buildtool/build_engine/target_map/result_map.test.cpp b/test/buildtool/build_engine/target_map/result_map.test.cpp
index 7e4228f5..a5ccc21b 100644
--- a/test/buildtool/build_engine/target_map/result_map.test.cpp
+++ b/test/buildtool/build_engine/target_map/result_map.test.cpp
@@ -37,6 +37,7 @@
#include "src/buildtool/common/action_description.hpp"
#include "src/buildtool/common/statistics.hpp"
#include "src/buildtool/common/tree.hpp"
+#include "src/buildtool/common/tree_overlay.hpp"
#include "src/buildtool/file_system/file_system_manager.hpp"
#include "src/buildtool/progress_reporting/progress.hpp"
@@ -60,6 +61,7 @@ namespace {
descs,
blobs,
std::vector<Tree::Ptr>(),
+ std::vector<TreeOverlay::Ptr>(),
std::unordered_set<std::string>{},
std::set<std::string>{},
std::set<std::string>{},