summaryrefslogtreecommitdiff
path: root/src/buildtool/build_engine/target_map/utils.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/buildtool/build_engine/target_map/utils.cpp')
-rw-r--r--src/buildtool/build_engine/target_map/utils.cpp14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/buildtool/build_engine/target_map/utils.cpp b/src/buildtool/build_engine/target_map/utils.cpp
index 2368f03e..bdd5dd11 100644
--- a/src/buildtool/build_engine/target_map/utils.cpp
+++ b/src/buildtool/build_engine/target_map/utils.cpp
@@ -75,6 +75,20 @@ auto BuildMaps::Target::Utils::keys_expr(const ExpressionPtr& map)
return ExpressionPtr{result};
}
+auto BuildMaps::Target::Utils::artifacts_tree(const ExpressionPtr& map)
+ -> std::variant<std::string, ExpressionPtr> {
+ auto result = Expression::map_t::underlying_map_t{};
+ for (auto const& [key, artifact] : map->Map()) {
+ auto location = ToNormalPath(std::filesystem::path{key}).string();
+ if (auto it = result.find(location);
+ it != result.end() && !(it->second == artifact)) {
+ return location;
+ }
+ result.emplace(std::move(location), artifact);
+ }
+ return ExpressionPtr{Expression::map_t{result}};
+}
+
auto BuildMaps::Target::Utils::tree_conflict(const ExpressionPtr& map)
-> std::optional<std::string> {
std::vector<std::filesystem::path> trees{};