summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKlaus Aehlig <klaus.aehlig@huawei.com>2022-08-19 11:52:02 +0200
committerKlaus Aehlig <klaus.aehlig@huawei.com>2022-08-19 17:22:43 +0200
commitb21058771a56fd794b0ec4d420e0f721606f884b (patch)
treec3c8bc3fba3af721bb84af7a3be275a82de84cc9 /src
parent141035d936a0b361d2802499fd9b824e8c6a6a5e (diff)
downloadjustbuild-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/TARGETS1
-rw-r--r--src/buildtool/build_engine/base_maps/directory_map.cpp6
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};