diff options
Diffstat (limited to 'src/other_tools/root_maps/fpath_git_map.hpp')
-rw-r--r-- | src/other_tools/root_maps/fpath_git_map.hpp | 27 |
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 |