diff options
Diffstat (limited to 'src/buildtool/execution_api/utils')
-rw-r--r-- | src/buildtool/execution_api/utils/TARGETS | 1 | ||||
-rw-r--r-- | src/buildtool/execution_api/utils/rehash_utils.cpp | 27 | ||||
-rw-r--r-- | src/buildtool/execution_api/utils/rehash_utils.hpp | 8 |
3 files changed, 31 insertions, 5 deletions
diff --git a/src/buildtool/execution_api/utils/TARGETS b/src/buildtool/execution_api/utils/TARGETS index e54b63f6..abcb7470 100644 --- a/src/buildtool/execution_api/utils/TARGETS +++ b/src/buildtool/execution_api/utils/TARGETS @@ -38,6 +38,7 @@ , "srcs": ["rehash_utils.cpp"] , "deps": [ ["src/buildtool/common", "common"] + , ["src/buildtool/common", "config"] , ["src/buildtool/file_system", "object_type"] , ["src/buildtool/storage", "config"] , ["src/utils/cpp", "expected"] diff --git a/src/buildtool/execution_api/utils/rehash_utils.cpp b/src/buildtool/execution_api/utils/rehash_utils.cpp index bbaefaeb..c5ca60c2 100644 --- a/src/buildtool/execution_api/utils/rehash_utils.cpp +++ b/src/buildtool/execution_api/utils/rehash_utils.cpp @@ -136,11 +136,11 @@ template <std::invocable<ArtifactDigest const&, ObjectType> TReadCallback> [&target_storage]( std::variant<std::filesystem::path, std::string> const& data, bool is_exec) -> std::optional<ArtifactDigest> { - if (not std::holds_alternative<std::filesystem::path>(data)) { - return std::nullopt; - } - return target_storage.CAS().StoreBlob( - std::get<std::filesystem::path>(data), is_exec); + return std::visit( + [&target_storage, is_exec](auto const& d) { + return target_storage.CAS().StoreBlob(d, is_exec); + }, + data); }; BazelMsgFactory::TreeStoreFunc store_dir = [&cas = target_storage.CAS()](std::string const& content) { @@ -252,4 +252,21 @@ auto RehashDigest(std::vector<Artifact::ObjectInfo> const& digests, /*from_git=*/false); } +auto RehashGitDigest(std::vector<Artifact::ObjectInfo> const& digests, + StorageConfig const& source_config, + StorageConfig const& target_config, + RepositoryConfig const& repo_config) + -> expected<std::vector<Artifact::ObjectInfo>, std::string> { + auto read = [&repo_config]( + ArtifactDigest const& digest, + ObjectType /*type*/) -> std::optional<std::string> { + return repo_config.ReadBlobFromGitCAS(digest.hash()); + }; + return RehashDigestImpl(digests, + source_config, + target_config, + std::move(read), + /*from_git=*/true); +} + } // namespace RehashUtils diff --git a/src/buildtool/execution_api/utils/rehash_utils.hpp b/src/buildtool/execution_api/utils/rehash_utils.hpp index e6b21874..7de1cc54 100644 --- a/src/buildtool/execution_api/utils/rehash_utils.hpp +++ b/src/buildtool/execution_api/utils/rehash_utils.hpp @@ -21,6 +21,7 @@ #include "src/buildtool/common/artifact.hpp" #include "src/buildtool/common/artifact_digest.hpp" +#include "src/buildtool/common/repository_config.hpp" #include "src/buildtool/file_system/object_type.hpp" #include "src/buildtool/storage/config.hpp" #include "src/utils/cpp/expected.hpp" @@ -66,6 +67,13 @@ namespace RehashUtils { StorageConfig const& target_config) -> expected<std::vector<Artifact::ObjectInfo>, std::string>; +[[nodiscard]] auto RehashGitDigest( + std::vector<Artifact::ObjectInfo> const& digests, + StorageConfig const& source_config, + StorageConfig const& target_config, + RepositoryConfig const& repo_config) + -> expected<std::vector<Artifact::ObjectInfo>, std::string>; + } // namespace RehashUtils #endif // INCLUDED_SRC_BUILDTOOL_EXECUTION_API_UTILS_REHASH_UTILS_HPP |