From b21058771a56fd794b0ec4d420e0f721606f884b Mon Sep 17 00:00:00 2001 From: Klaus Aehlig Date: Fri, 19 Aug 2022 11:52:02 +0200 Subject: directory_map: correctly resolve module names to directories When constructing module names, we normalize the directory path implicit in it. However, we take the empty string as valid canonical name for the top-level directory (as it is the empty relative path). When accessing git roots, however, only the file-system canonical path "." is special cased as self reference. Hence explicitly convert the empty string. --- src/buildtool/build_engine/base_maps/TARGETS | 1 + src/buildtool/build_engine/base_maps/directory_map.cpp | 6 ++++-- 2 files changed, 5 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/buildtool/build_engine/base_maps/TARGETS b/src/buildtool/build_engine/base_maps/TARGETS index dc2a51ca..bf513067 100644 --- a/src/buildtool/build_engine/base_maps/TARGETS +++ b/src/buildtool/build_engine/base_maps/TARGETS @@ -13,6 +13,7 @@ , "deps": [ ["src/buildtool/common", "config"] , ["src/buildtool/multithreading", "async_map_consumer"] + , ["src/utils/cpp", "path"] , "module_name" ] , "stage": ["src", "buildtool", "build_engine", "base_maps"] diff --git a/src/buildtool/build_engine/base_maps/directory_map.cpp b/src/buildtool/build_engine/base_maps/directory_map.cpp index b8cc4441..59646aa2 100644 --- a/src/buildtool/build_engine/base_maps/directory_map.cpp +++ b/src/buildtool/build_engine/base_maps/directory_map.cpp @@ -5,6 +5,7 @@ #include "src/buildtool/common/repository_config.hpp" #include "src/buildtool/multithreading/async_map_consumer.hpp" +#include "src/utils/cpp/path.hpp" auto BuildMaps::Base::CreateDirectoryEntriesMap(std::size_t jobs) -> DirectoryEntriesMap { @@ -22,14 +23,15 @@ auto BuildMaps::Base::CreateDirectoryEntriesMap(std::size_t jobs) true); return; } - if (not ws_root->IsDirectory(key.module)) { + auto dir_path = key.module.empty() ? "." : key.module; + if (not ws_root->IsDirectory(dir_path)) { // Missing directory is fine (source tree might be incomplete), // contains no entries. (*setter)(FileRoot::DirectoryEntries{ FileRoot::DirectoryEntries::pairs_t{}}); return; } - (*setter)(ws_root->ReadDirectory(key.module)); + (*setter)(ws_root->ReadDirectory(dir_path)); }; return AsyncMapConsumer{directory_reader, jobs}; -- cgit v1.2.3