diff options
author | Klaus Aehlig <klaus.aehlig@huawei.com> | 2022-08-19 11:52:02 +0200 |
---|---|---|
committer | Klaus Aehlig <klaus.aehlig@huawei.com> | 2022-08-19 17:22:43 +0200 |
commit | b21058771a56fd794b0ec4d420e0f721606f884b (patch) | |
tree | c3c8bc3fba3af721bb84af7a3be275a82de84cc9 /src | |
parent | 141035d936a0b361d2802499fd9b824e8c6a6a5e (diff) | |
download | justbuild-b21058771a56fd794b0ec4d420e0f721606f884b.tar.gz |
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.
Diffstat (limited to 'src')
-rw-r--r-- | src/buildtool/build_engine/base_maps/TARGETS | 1 | ||||
-rw-r--r-- | src/buildtool/build_engine/base_maps/directory_map.cpp | 6 |
2 files changed, 5 insertions, 2 deletions
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<BuildMaps::Base::ModuleName, FileRoot::DirectoryEntries>{directory_reader, jobs}; |