From 30c5aa0b3dc37c784311a905f120e0e8b1f651fd Mon Sep 17 00:00:00 2001 From: Sascha Roloff Date: Tue, 5 Jul 2022 20:30:25 +0200 Subject: Target map makes use of known trees and avoids directory traversal --- src/buildtool/build_engine/target_map/target_map.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'src/buildtool/build_engine/target_map/target_map.cpp') diff --git a/src/buildtool/build_engine/target_map/target_map.cpp b/src/buildtool/build_engine/target_map/target_map.cpp index 35f38588..087bcacb 100644 --- a/src/buildtool/build_engine/target_map/target_map.cpp +++ b/src/buildtool/build_engine/target_map/target_map.cpp @@ -1323,6 +1323,24 @@ void TreeTarget( auto values) { // expected values.size() == 1 const auto& dir_entries = *values[0]; + auto known_tree = dir_entries.AsKnownTree(target.repository); + if (known_tree) { + auto tree = ExpressionPtr{ + Expression::map_t{target.name, ExpressionPtr{*known_tree}}}; + + auto analysis_result = std::make_shared( + TargetResult{tree, {}, tree}, + std::vector{}, + std::vector{}, + std::vector{}, + std::unordered_set{}, + std::set{}); + analysis_result = + result_map->Add(key.target, {}, std::move(analysis_result)); + (*setter)(std::move(analysis_result)); + return; + } + using BuildMaps::Target::ConfiguredTarget; std::vector v; -- cgit v1.2.3