summaryrefslogtreecommitdiff
path: root/src/other_tools/root_maps/fpath_git_map.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/other_tools/root_maps/fpath_git_map.hpp')
-rw-r--r--src/other_tools/root_maps/fpath_git_map.hpp27
1 files changed, 26 insertions, 1 deletions
diff --git a/src/other_tools/root_maps/fpath_git_map.hpp b/src/other_tools/root_maps/fpath_git_map.hpp
index 9b209163..9c78b868 100644
--- a/src/other_tools/root_maps/fpath_git_map.hpp
+++ b/src/other_tools/root_maps/fpath_git_map.hpp
@@ -17,10 +17,22 @@
#include "nlohmann/json.hpp"
#include "src/other_tools/ops_maps/import_to_git_map.hpp"
+#include "src/utils/cpp/hash_combine.hpp"
#include "src/utils/cpp/path_hash.hpp"
+struct FpathInfo {
+ std::filesystem::path fpath{}; /* key */
+ // create root that ignores symlinks
+ bool ignore_special{}; /* key */
+
+ [[nodiscard]] auto operator==(const FpathInfo& other) const noexcept
+ -> bool {
+ return fpath == other.fpath and ignore_special == other.ignore_special;
+ }
+};
+
/// \brief Maps the path to a repo on the file system to its Git tree WS root.
-using FilePathGitMap = AsyncMapConsumer<std::filesystem::path, nlohmann::json>;
+using FilePathGitMap = AsyncMapConsumer<FpathInfo, nlohmann::json>;
[[nodiscard]] auto CreateFilePathGitMap(
std::optional<std::string> const& current_subcmd,
@@ -28,4 +40,17 @@ using FilePathGitMap = AsyncMapConsumer<std::filesystem::path, nlohmann::json>;
gsl::not_null<ImportToGitMap*> const& import_to_git_map,
std::size_t jobs) -> FilePathGitMap;
+namespace std {
+template <>
+struct hash<FpathInfo> {
+ [[nodiscard]] auto operator()(FpathInfo const& ct) const noexcept
+ -> std::size_t {
+ size_t seed{};
+ hash_combine<std::filesystem::path>(&seed, ct.fpath);
+ hash_combine<bool>(&seed, ct.ignore_special);
+ return seed;
+ }
+};
+} // namespace std
+
#endif // INCLUDED_SRC_OTHER_TOOLS_ROOT_MAPS_FPATH_GIT_MAP_HPP