From 541ccbb58b9d85af308a1cbfbc6642c19758b883 Mon Sep 17 00:00:00 2001 From: Oliver Reiche Date: Mon, 12 May 2025 12:11:35 +0200 Subject: TreeOperationsUtils: Fix Bazel Directory creation ... which requires all entries to be sorted in lexicographical order. --- .../tree_operations/tree_operations_utils.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/buildtool/execution_engine/tree_operations/tree_operations_utils.cpp b/src/buildtool/execution_engine/tree_operations/tree_operations_utils.cpp index a650d88f..ecf08e8e 100644 --- a/src/buildtool/execution_engine/tree_operations/tree_operations_utils.cpp +++ b/src/buildtool/execution_engine/tree_operations/tree_operations_utils.cpp @@ -14,9 +14,12 @@ #include "src/buildtool/execution_engine/tree_operations/tree_operations_utils.hpp" +#include #include #include +#include #include +#include #include // for remove_reference #include #include @@ -162,9 +165,16 @@ auto TreeOperationsUtils::ReadTree( auto TreeOperationsUtils::SerializeBazelDirectory( TreeEntries const& tree_entries) noexcept -> std::optional { + // Sort tree entry names, so we can process them in the correct order. + auto sorted = std::set{}; + std::transform(tree_entries.begin(), + tree_entries.end(), + std::inserter(sorted, sorted.end()), + [](auto const& name_entry) { return name_entry.first; }); // Convert tree entries to bazel directory. bazel_re::Directory bazel_directory{}; - for (auto const& [name, entry] : tree_entries) { + for (auto const& name : sorted) { + auto const& entry = tree_entries.at(name); switch (entry.info.type) { case ObjectType::File: case ObjectType::Executable: { -- cgit v1.2.3