diff options
author | Maksim Denisov <denisov.maksim@huawei.com> | 2024-07-05 17:27:13 +0200 |
---|---|---|
committer | Maksim Denisov <denisov.maksim@huawei.com> | 2024-07-22 17:01:13 +0200 |
commit | dd23c6e397584f4bf1cf84a73d9c382a8ff81de7 (patch) | |
tree | 0f0f600a4674a03da42c07f4ea016ff3c2dc578e /src | |
parent | beb3faa6956b9bfd58d4ea6644a9b2987409aaba (diff) | |
download | justbuild-dd23c6e397584f4bf1cf84a73d9c382a8ff81de7.tar.gz |
Pass HashFunction to ArtifactDigest::Create
Diffstat (limited to 'src')
25 files changed, 96 insertions, 51 deletions
diff --git a/src/buildtool/build_engine/target_map/built_in_rules.cpp b/src/buildtool/build_engine/target_map/built_in_rules.cpp index abcc9d40..538f1940 100644 --- a/src/buildtool/build_engine/target_map/built_in_rules.cpp +++ b/src/buildtool/build_engine/target_map/built_in_rules.cpp @@ -34,6 +34,7 @@ #include "src/buildtool/build_engine/target_map/utils.hpp" #include "src/buildtool/common/artifact_description.hpp" #include "src/buildtool/common/repository_config.hpp" +#include "src/buildtool/crypto/hash_function.hpp" #include "src/utils/cpp/path.hpp" #include "src/utils/cpp/vector.hpp" @@ -267,11 +268,12 @@ void BlobGenRuleWithDeps( return; } - auto stage = ExpressionPtr{Expression::map_t{ - name_val->String(), - ExpressionPtr{ArtifactDescription::CreateKnown( - ArtifactDigest::Create<ObjectType::File>(data_val->String()), - blob_type)}}}; + auto stage = ExpressionPtr{ + Expression::map_t{name_val->String(), + ExpressionPtr{ArtifactDescription::CreateKnown( + ArtifactDigest::Create<ObjectType::File>( + HashFunction::Instance(), data_val->String()), + blob_type)}}}; auto analysis_result = std::make_shared<AnalysedTarget const>( TargetResult{.artifact_stage = stage, diff --git a/src/buildtool/build_engine/target_map/target_map.cpp b/src/buildtool/build_engine/target_map/target_map.cpp index 1c8d3743..0c970636 100644 --- a/src/buildtool/build_engine/target_map/target_map.cpp +++ b/src/buildtool/build_engine/target_map/target_map.cpp @@ -40,6 +40,7 @@ #include "src/buildtool/common/artifact_description.hpp" #include "src/buildtool/common/repository_config.hpp" #include "src/buildtool/common/statistics.hpp" +#include "src/buildtool/crypto/hash_function.hpp" #include "src/buildtool/logging/log_level.hpp" #include "src/buildtool/logging/logger.hpp" #include "src/utils/cpp/gsl.hpp" @@ -731,7 +732,8 @@ void withDependencies( } blobs.emplace_back(data->String()); return ExpressionPtr{ArtifactDescription::CreateKnown( - ArtifactDigest::Create<ObjectType::File>(data->String()), + ArtifactDigest::Create<ObjectType::File>( + HashFunction::Instance(), data->String()), ObjectType::File)}; }}, @@ -751,7 +753,8 @@ void withDependencies( blobs.emplace_back(data->String()); return ExpressionPtr{ArtifactDescription::CreateKnown( - ArtifactDigest::Create<ObjectType::Symlink>(data->String()), + ArtifactDigest::Create<ObjectType::Symlink>( + HashFunction::Instance(), data->String()), ObjectType::Symlink)}; }}, diff --git a/src/buildtool/common/artifact_digest.hpp b/src/buildtool/common/artifact_digest.hpp index 59299232..686a6fa5 100644 --- a/src/buildtool/common/artifact_digest.hpp +++ b/src/buildtool/common/artifact_digest.hpp @@ -74,17 +74,18 @@ class ArtifactDigest { } template <ObjectType kType> - [[nodiscard]] static auto Create(std::string const& content) noexcept + [[nodiscard]] static auto Create(HashFunction hash_function, + std::string const& content) noexcept -> ArtifactDigest { if constexpr (kType == ObjectType::Tree) { return ArtifactDigest{ - HashFunction::Instance().ComputeTreeHash(content).HexString(), + hash_function.ComputeTreeHash(content).HexString(), content.size(), /*is_tree=*/true}; } else { return ArtifactDigest{ - HashFunction::Instance().ComputeBlobHash(content).HexString(), + hash_function.ComputeBlobHash(content).HexString(), content.size(), /*is_tree=*/false}; } @@ -92,10 +93,11 @@ class ArtifactDigest { template <ObjectType kType> [[nodiscard]] static auto CreateFromFile( + HashFunction hash_function, std::filesystem::path const& path) noexcept -> std::optional<ArtifactDigest> { static constexpr bool kIsTree = IsTreeObject(kType); - auto hash = HashFunction::Instance().ComputeHashFile(path, kIsTree); + auto hash = hash_function.ComputeHashFile(path, kIsTree); if (hash) { return ArtifactDigest{ hash->first.HexString(), hash->second, kIsTree}; diff --git a/src/buildtool/execution_api/bazel_msg/TARGETS b/src/buildtool/execution_api/bazel_msg/TARGETS index cc14a0df..db495aa5 100644 --- a/src/buildtool/execution_api/bazel_msg/TARGETS +++ b/src/buildtool/execution_api/bazel_msg/TARGETS @@ -34,6 +34,7 @@ [ ["src/buildtool/compatibility", "compatibility"] , ["src/utils/cpp", "hex_string"] , ["src/buildtool/file_system", "file_system_manager"] + , ["src/buildtool/crypto", "hash_function"] , ["src/buildtool/file_system", "git_repo"] ] , "stage": ["src", "buildtool", "execution_api", "bazel_msg"] diff --git a/src/buildtool/execution_api/bazel_msg/bazel_msg_factory.cpp b/src/buildtool/execution_api/bazel_msg/bazel_msg_factory.cpp index 48c8b062..155067fd 100644 --- a/src/buildtool/execution_api/bazel_msg/bazel_msg_factory.cpp +++ b/src/buildtool/execution_api/bazel_msg/bazel_msg_factory.cpp @@ -27,6 +27,7 @@ #include "src/buildtool/common/bazel_types.hpp" #include "src/buildtool/compatibility/native_support.hpp" +#include "src/buildtool/crypto/hash_function.hpp" #include "src/buildtool/file_system/file_system_manager.hpp" #include "src/buildtool/file_system/git_repo.hpp" #include "src/utils/cpp/hex_string.hpp" @@ -184,7 +185,8 @@ template <class T> if (not content) { return std::nullopt; } - auto digest = ArtifactDigest::Create<ObjectType::File>(*content); + auto digest = ArtifactDigest::Create<ObjectType::File>( + HashFunction::Instance(), *content); auto msg = CreateDirectoryNode(dir_name); msg.set_allocated_digest( @@ -223,7 +225,8 @@ template <class T> if (not content) { return std::nullopt; } - auto digest = ArtifactDigest::Create<ObjectType::File>(*content); + auto digest = ArtifactDigest::Create<ObjectType::File>( + HashFunction::Instance(), *content); return BazelBlob{digest, std::move(*content), /*is_exec=*/false}; } @@ -259,7 +262,8 @@ template <class T> if (not content) { return std::nullopt; } - auto digest = ArtifactDigest::Create<ObjectType::File>(*content); + auto digest = ArtifactDigest::Create<ObjectType::File>( + HashFunction::Instance(), *content); return BazelBlob{digest, std::move(*content), /*is_exec=*/false}; } diff --git a/src/buildtool/execution_api/common/tree_reader_utils.cpp b/src/buildtool/execution_api/common/tree_reader_utils.cpp index 1ec7edc0..874d1884 100644 --- a/src/buildtool/execution_api/common/tree_reader_utils.cpp +++ b/src/buildtool/execution_api/common/tree_reader_utils.cpp @@ -19,6 +19,7 @@ #include "nlohmann/json.hpp" #include "src/buildtool/common/artifact_digest.hpp" +#include "src/buildtool/crypto/hash_function.hpp" #include "src/buildtool/file_system/object_type.hpp" #include "src/buildtool/logging/log_level.hpp" #include "src/buildtool/logging/logger.hpp" @@ -42,7 +43,8 @@ namespace { [[nodiscard]] auto CreateObjectInfo(bazel_re::SymlinkNode const& node) -> Artifact::ObjectInfo { return Artifact::ObjectInfo{ - .digest = ArtifactDigest::Create<ObjectType::File>(node.target()), + .digest = ArtifactDigest::Create<ObjectType::File>( + HashFunction::Instance(), node.target()), .type = ObjectType::Symlink}; } diff --git a/src/buildtool/execution_api/git/TARGETS b/src/buildtool/execution_api/git/TARGETS index df3dfcdc..2c614f08 100644 --- a/src/buildtool/execution_api/git/TARGETS +++ b/src/buildtool/execution_api/git/TARGETS @@ -11,6 +11,7 @@ , ["src/buildtool/execution_api/common", "common_api"] , ["src/buildtool/logging", "log_level"] , ["src/buildtool/logging", "logging"] + , ["src/buildtool/crypto", "hash_function"] ] , "stage": ["src", "buildtool", "execution_api", "git"] } diff --git a/src/buildtool/execution_api/git/git_api.hpp b/src/buildtool/execution_api/git/git_api.hpp index a18bd71b..b6a30a9b 100644 --- a/src/buildtool/execution_api/git/git_api.hpp +++ b/src/buildtool/execution_api/git/git_api.hpp @@ -25,6 +25,7 @@ #include "gsl/gsl" #include "src/buildtool/common/artifact_digest.hpp" #include "src/buildtool/common/repository_config.hpp" +#include "src/buildtool/crypto/hash_function.hpp" #include "src/buildtool/execution_api/bazel_msg/bazel_msg_factory.hpp" #include "src/buildtool/execution_api/common/artifact_blob_container.hpp" #include "src/buildtool/execution_api/common/common_api.hpp" @@ -227,7 +228,7 @@ class GitApi final : public IExecutionApi { return false; } auto digest = ArtifactDigest::Create<ObjectType::File>( - *entry_content); + HashFunction::Instance(), *entry_content); // Collect blob and upload to remote CAS if transfer // size reached. if (not UpdateContainerAndUpload<ArtifactDigest>( @@ -258,8 +259,10 @@ class GitApi final : public IExecutionApi { ArtifactDigest digest = IsTreeObject(info.type) - ? ArtifactDigest::Create<ObjectType::Tree>(*content) - : ArtifactDigest::Create<ObjectType::File>(*content); + ? ArtifactDigest::Create<ObjectType::Tree>( + HashFunction::Instance(), *content) + : ArtifactDigest::Create<ObjectType::File>( + HashFunction::Instance(), *content); // Collect blob and upload to remote CAS if transfer size reached. if (not UpdateContainerAndUpload<ArtifactDigest>( diff --git a/src/buildtool/execution_api/local/TARGETS b/src/buildtool/execution_api/local/TARGETS index 53b7f717..682c8624 100644 --- a/src/buildtool/execution_api/local/TARGETS +++ b/src/buildtool/execution_api/local/TARGETS @@ -42,6 +42,7 @@ , ["src/buildtool/execution_api/execution_service", "cas_utils"] , ["src/buildtool/file_system", "git_repo"] , ["src/utils/cpp", "tmp_dir"] + , ["src/buildtool/crypto", "hash_function"] ] , "stage": ["src", "buildtool", "execution_api", "local"] , "private-deps": diff --git a/src/buildtool/execution_api/local/local_api.hpp b/src/buildtool/execution_api/local/local_api.hpp index 5f8fb6a4..e8ba0831 100644 --- a/src/buildtool/execution_api/local/local_api.hpp +++ b/src/buildtool/execution_api/local/local_api.hpp @@ -34,6 +34,7 @@ #include "src/buildtool/common/repository_config.hpp" #include "src/buildtool/compatibility/compatibility.hpp" #include "src/buildtool/compatibility/native_support.hpp" +#include "src/buildtool/crypto/hash_function.hpp" #include "src/buildtool/execution_api/bazel_msg/bazel_blob_container.hpp" #include "src/buildtool/execution_api/common/artifact_blob_container.hpp" #include "src/buildtool/execution_api/common/blob_tree.hpp" @@ -214,8 +215,10 @@ class LocalApi final : public IExecutionApi { // storage_.ReadTreeInfos() will contain 0 as size. ArtifactDigest digest = IsTreeObject(info.type) - ? ArtifactDigest::Create<ObjectType::Tree>(*content) - : ArtifactDigest::Create<ObjectType::File>(*content); + ? ArtifactDigest::Create<ObjectType::Tree>( + HashFunction::Instance(), *content) + : ArtifactDigest::Create<ObjectType::File>( + HashFunction::Instance(), *content); // Collect blob and upload to remote CAS if transfer size reached. if (not UpdateContainerAndUpload<ArtifactDigest>( diff --git a/src/buildtool/execution_api/local/local_response.hpp b/src/buildtool/execution_api/local/local_response.hpp index 30d47ca7..c6214320 100644 --- a/src/buildtool/execution_api/local/local_response.hpp +++ b/src/buildtool/execution_api/local/local_response.hpp @@ -20,6 +20,7 @@ #include <utility> #include "gsl/gsl" +#include "src/buildtool/crypto/hash_function.hpp" #include "src/buildtool/execution_api/common/execution_response.hpp" #include "src/buildtool/execution_api/local/local_action.hpp" #include "src/buildtool/file_system/file_system_manager.hpp" @@ -139,7 +140,7 @@ class LocalResponse final : public IExecutionResponse { link.path(), Artifact::ObjectInfo{ .digest = ArtifactDigest::Create<ObjectType::File>( - link.target()), + HashFunction::Instance(), link.target()), .type = ObjectType::Symlink}); } catch (...) { return false; @@ -151,7 +152,7 @@ class LocalResponse final : public IExecutionResponse { link.path(), Artifact::ObjectInfo{ .digest = ArtifactDigest::Create<ObjectType::File>( - link.target()), + HashFunction::Instance(), link.target()), .type = ObjectType::Symlink}); dir_symlinks.emplace(link.path()); // add it to set } catch (...) { @@ -166,7 +167,7 @@ class LocalResponse final : public IExecutionResponse { link.path(), Artifact::ObjectInfo{ .digest = ArtifactDigest::Create<ObjectType::File>( - link.target()), + HashFunction::Instance(), link.target()), .type = ObjectType::Symlink}); } catch (...) { return false; @@ -178,7 +179,7 @@ class LocalResponse final : public IExecutionResponse { link.path(), Artifact::ObjectInfo{ .digest = ArtifactDigest::Create<ObjectType::File>( - link.target()), + HashFunction::Instance(), link.target()), .type = ObjectType::Symlink}); } catch (...) { return false; diff --git a/src/buildtool/execution_api/remote/TARGETS b/src/buildtool/execution_api/remote/TARGETS index ad4093f3..e45af2f1 100644 --- a/src/buildtool/execution_api/remote/TARGETS +++ b/src/buildtool/execution_api/remote/TARGETS @@ -56,7 +56,6 @@ , ["@", "grpc", "", "grpc++"] , ["src/buildtool/common/remote", "retry"] , ["src/buildtool/execution_api/common", "message_limits"] - , ["src/buildtool/crypto", "hash_function"] , ["src/utils/cpp", "path"] ] } diff --git a/src/buildtool/execution_api/remote/bazel/bazel_network_reader.cpp b/src/buildtool/execution_api/remote/bazel/bazel_network_reader.cpp index 4547ff8c..135cfd52 100644 --- a/src/buildtool/execution_api/remote/bazel/bazel_network_reader.cpp +++ b/src/buildtool/execution_api/remote/bazel/bazel_network_reader.cpp @@ -138,9 +138,10 @@ auto BazelNetworkReader::MakeAuxiliaryMap( result.reserve(full_tree.size()); for (auto& dir : full_tree) { try { - result.emplace(ArtifactDigest::Create<ObjectType::File>( - dir.SerializeAsString()), - std::move(dir)); + result.emplace( + ArtifactDigest::Create<ObjectType::File>( + HashFunction::Instance(), dir.SerializeAsString()), + std::move(dir)); } catch (...) { return std::nullopt; } @@ -191,8 +192,10 @@ auto BazelNetworkReader::BatchReadBlobs( auto BazelNetworkReader::Validate(BazelBlob const& blob) noexcept -> bool { ArtifactDigest const rehashed_digest = NativeSupport::IsTree(blob.digest.hash()) - ? ArtifactDigest::Create<ObjectType::Tree>(*blob.data) - : ArtifactDigest::Create<ObjectType::File>(*blob.data); + ? ArtifactDigest::Create<ObjectType::Tree>(HashFunction::Instance(), + *blob.data) + : ArtifactDigest::Create<ObjectType::File>(HashFunction::Instance(), + *blob.data); if (rehashed_digest == ArtifactDigest{blob.digest}) { return true; } diff --git a/src/buildtool/execution_api/remote/bazel/bazel_response.cpp b/src/buildtool/execution_api/remote/bazel/bazel_response.cpp index 1b7682bd..0cb860a3 100644 --- a/src/buildtool/execution_api/remote/bazel/bazel_response.cpp +++ b/src/buildtool/execution_api/remote/bazel/bazel_response.cpp @@ -18,6 +18,7 @@ #include "gsl/gsl" #include "src/buildtool/compatibility/native_support.hpp" +#include "src/buildtool/crypto/hash_function.hpp" #include "src/buildtool/execution_api/bazel_msg/bazel_blob_container.hpp" #include "src/buildtool/execution_api/common/common_api.hpp" #include "src/buildtool/execution_api/remote/bazel/bazel_cas_client.hpp" @@ -30,7 +31,8 @@ namespace { auto ProcessDirectoryMessage(bazel_re::Directory const& dir) noexcept -> std::optional<BazelBlob> { auto data = dir.SerializeAsString(); - auto digest = ArtifactDigest::Create<ObjectType::File>(data); + auto digest = ArtifactDigest::Create<ObjectType::File>( + HashFunction::Instance(), data); return BazelBlob{std::move(digest), std::move(data), /*is_exec=*/false}; } @@ -99,8 +101,8 @@ auto BazelResponse::Populate() noexcept -> bool { artifacts.emplace( link.path(), Artifact::ObjectInfo{ - .digest = - ArtifactDigest::Create<ObjectType::File>(link.target()), + .digest = ArtifactDigest::Create<ObjectType::File>( + HashFunction::Instance(), link.target()), .type = ObjectType::Symlink}); } catch (...) { return false; @@ -111,8 +113,8 @@ auto BazelResponse::Populate() noexcept -> bool { artifacts.emplace( link.path(), Artifact::ObjectInfo{ - .digest = - ArtifactDigest::Create<ObjectType::File>(link.target()), + .digest = ArtifactDigest::Create<ObjectType::File>( + HashFunction::Instance(), link.target()), .type = ObjectType::Symlink}); dir_symlinks.emplace(link.path()); // add it to set } catch (...) { @@ -126,8 +128,8 @@ auto BazelResponse::Populate() noexcept -> bool { artifacts.emplace( link.path(), Artifact::ObjectInfo{ - .digest = - ArtifactDigest::Create<ObjectType::File>(link.target()), + .digest = ArtifactDigest::Create<ObjectType::File>( + HashFunction::Instance(), link.target()), .type = ObjectType::Symlink}); } catch (...) { return false; @@ -138,8 +140,8 @@ auto BazelResponse::Populate() noexcept -> bool { artifacts.emplace( link.path(), Artifact::ObjectInfo{ - .digest = - ArtifactDigest::Create<ObjectType::File>(link.target()), + .digest = ArtifactDigest::Create<ObjectType::File>( + HashFunction::Instance(), link.target()), .type = ObjectType::Symlink}); } catch (...) { return false; diff --git a/src/buildtool/execution_engine/executor/TARGETS b/src/buildtool/execution_engine/executor/TARGETS index 2956b33f..ecba14f0 100644 --- a/src/buildtool/execution_engine/executor/TARGETS +++ b/src/buildtool/execution_engine/executor/TARGETS @@ -22,6 +22,7 @@ , ["@", "gsl", "", "gsl"] , ["src/buildtool/common", "common"] , ["src/buildtool/common/remote", "remote_common"] + , ["src/buildtool/crypto", "hash_function"] ] , "stage": ["src", "buildtool", "execution_engine", "executor"] } diff --git a/src/buildtool/execution_engine/executor/executor.hpp b/src/buildtool/execution_engine/executor/executor.hpp index 0f0a09ec..d4d1f928 100644 --- a/src/buildtool/execution_engine/executor/executor.hpp +++ b/src/buildtool/execution_engine/executor/executor.hpp @@ -36,6 +36,7 @@ #include "src/buildtool/common/statistics.hpp" #include "src/buildtool/common/tree.hpp" #include "src/buildtool/compatibility/compatibility.hpp" +#include "src/buildtool/crypto/hash_function.hpp" #include "src/buildtool/execution_api/common/artifact_blob_container.hpp" #include "src/buildtool/execution_api/common/common_api.hpp" #include "src/buildtool/execution_api/common/execution_api.hpp" @@ -456,7 +457,8 @@ class ExecutorImpl { if (not content.has_value()) { return std::nullopt; } - auto digest = ArtifactDigest::Create<ObjectType::File>(*content); + auto digest = ArtifactDigest::Create<ObjectType::File>( + HashFunction::Instance(), *content); if (not api.Upload(ArtifactBlobContainer{ {ArtifactBlob{digest, std::move(*content), diff --git a/src/buildtool/file_system/TARGETS b/src/buildtool/file_system/TARGETS index 2d3198c5..b67ac0cf 100644 --- a/src/buildtool/file_system/TARGETS +++ b/src/buildtool/file_system/TARGETS @@ -28,6 +28,7 @@ , ["src/buildtool/common", "common"] , ["src/buildtool/logging", "log_level"] , ["src/buildtool/logging", "logging"] + , ["src/buildtool/crypto", "hash_function"] ] , "stage": ["src", "buildtool", "file_system"] } diff --git a/src/buildtool/file_system/object_cas.hpp b/src/buildtool/file_system/object_cas.hpp index aa521e07..122778b5 100644 --- a/src/buildtool/file_system/object_cas.hpp +++ b/src/buildtool/file_system/object_cas.hpp @@ -22,6 +22,7 @@ #include "src/buildtool/common/artifact_digest.hpp" #include "src/buildtool/common/bazel_types.hpp" +#include "src/buildtool/crypto/hash_function.hpp" #include "src/buildtool/file_system/file_storage.hpp" #include "src/buildtool/file_system/file_system_manager.hpp" #include "src/buildtool/logging/log_level.hpp" @@ -116,13 +117,14 @@ class ObjectCAS { [[nodiscard]] static auto CreateDigest(std::string const& bytes) noexcept -> std::optional<bazel_re::Digest> { - return ArtifactDigest::Create<kType>(bytes); + return ArtifactDigest::Create<kType>(HashFunction::Instance(), bytes); } [[nodiscard]] static auto CreateDigest( std::filesystem::path const& file_path) noexcept -> std::optional<bazel_re::Digest> { - return ArtifactDigest::CreateFromFile<kType>(file_path); + return ArtifactDigest::CreateFromFile<kType>(HashFunction::Instance(), + file_path); } [[nodiscard]] auto IsAvailable( diff --git a/src/buildtool/graph_traverser/TARGETS b/src/buildtool/graph_traverser/TARGETS index 0bb9a8e8..189159f2 100644 --- a/src/buildtool/graph_traverser/TARGETS +++ b/src/buildtool/graph_traverser/TARGETS @@ -25,6 +25,7 @@ , ["src/buildtool/logging", "log_level"] , ["src/buildtool/logging", "logging"] , ["src/buildtool/progress_reporting", "base_progress_reporter"] + , ["src/buildtool/crypto", "hash_function"] ] , "stage": ["src", "buildtool", "graph_traverser"] } diff --git a/src/buildtool/graph_traverser/graph_traverser.hpp b/src/buildtool/graph_traverser/graph_traverser.hpp index 9c2a2175..ae154c6a 100644 --- a/src/buildtool/graph_traverser/graph_traverser.hpp +++ b/src/buildtool/graph_traverser/graph_traverser.hpp @@ -37,6 +37,7 @@ #include "src/buildtool/common/repository_config.hpp" #include "src/buildtool/common/statistics.hpp" #include "src/buildtool/common/tree.hpp" +#include "src/buildtool/crypto/hash_function.hpp" #include "src/buildtool/execution_api/common/api_bundle.hpp" #include "src/buildtool/execution_api/common/artifact_blob_container.hpp" #include "src/buildtool/execution_api/common/common_api.hpp" @@ -292,7 +293,8 @@ class GraphTraverser { std::vector<std::string> const& blobs) const noexcept -> bool { ArtifactBlobContainer container; for (auto const& blob : blobs) { - auto digest = ArtifactDigest::Create<ObjectType::File>(blob); + auto digest = ArtifactDigest::Create<ObjectType::File>( + HashFunction::Instance(), blob); Logger::Log(logger_, LogLevel::Trace, [&]() { return fmt::format( "Uploaded blob {}, its digest has id {} and size {}.", diff --git a/src/buildtool/storage/TARGETS b/src/buildtool/storage/TARGETS index 0b264aab..c5d1fb9c 100644 --- a/src/buildtool/storage/TARGETS +++ b/src/buildtool/storage/TARGETS @@ -15,6 +15,7 @@ , ["src/utils/cpp", "gsl"] , ["src/utils/cpp", "tmp_dir"] , ["src/utils/cpp", "expected"] + , ["src/buildtool/crypto", "hash_function"] ] , "stage": ["src", "buildtool", "storage"] } @@ -81,6 +82,7 @@ , ["src/buildtool/file_system", "git_repo"] , ["src/buildtool/common", "artifact_description"] , ["src/buildtool/compatibility", "compatibility"] + , ["src/buildtool/crypto", "hash_function"] ] , "stage": ["src", "buildtool", "storage"] , "private-deps": diff --git a/src/buildtool/storage/compactifier.cpp b/src/buildtool/storage/compactifier.cpp index 34f17b67..916a131a 100644 --- a/src/buildtool/storage/compactifier.cpp +++ b/src/buildtool/storage/compactifier.cpp @@ -271,7 +271,8 @@ template <ObjectType kType> } // Calculate the digest for the entry: - auto const digest = ArtifactDigest::CreateFromFile<kType>(path); + auto const digest = + ArtifactDigest::CreateFromFile<kType>(HashFunction::Instance(), path); if (not digest) { task.Log(LogLevel::Error, "Failed to calculate digest for {}", diff --git a/src/buildtool/storage/config.hpp b/src/buildtool/storage/config.hpp index 4bc8911c..a6213074 100644 --- a/src/buildtool/storage/config.hpp +++ b/src/buildtool/storage/config.hpp @@ -27,6 +27,7 @@ #include "src/buildtool/common/artifact_digest.hpp" #include "src/buildtool/common/remote/remote_common.hpp" #include "src/buildtool/compatibility/compatibility.hpp" +#include "src/buildtool/crypto/hash_function.hpp" #include "src/buildtool/file_system/file_system_manager.hpp" #include "src/buildtool/file_system/object_type.hpp" #include "src/buildtool/logging/log_level.hpp" @@ -157,6 +158,7 @@ struct StorageConfig final { -> std::string { try { return ArtifactDigest::Create<ObjectType::File>( + HashFunction::Instance(), DescribeBackend(std::nullopt, {}, {}).value()) .hash(); } catch (...) { @@ -219,8 +221,9 @@ class StorageConfig::Builder final { auto desc = DescribeBackend( remote_address_, remote_platform_properties_, remote_dispatch_); if (desc) { - backend_description_id = - ArtifactDigest::Create<ObjectType::File>(*desc).hash(); + backend_description_id = ArtifactDigest::Create<ObjectType::File>( + HashFunction::Instance(), *desc) + .hash(); } else { return unexpected{desc.error()}; diff --git a/src/buildtool/storage/local_ac.tpp b/src/buildtool/storage/local_ac.tpp index 559346f5..c60e8751 100644 --- a/src/buildtool/storage/local_ac.tpp +++ b/src/buildtool/storage/local_ac.tpp @@ -18,6 +18,7 @@ #include <tuple> //std::ignore #include "src/buildtool/common/bazel_types.hpp" +#include "src/buildtool/crypto/hash_function.hpp" #include "src/buildtool/logging/log_level.hpp" #include "src/buildtool/storage/local_ac.hpp" @@ -104,8 +105,8 @@ requires(kIsLocalGeneration) auto LocalAC<kDoGlobalUplink>::LocalUplinkEntry( for (auto const& link : result->output_file_symlinks()) { if (not cas_.LocalUplinkBlob( latest.cas_, - bazel_re::Digest( - ArtifactDigest::Create<ObjectType::File>(link.target())), + bazel_re::Digest(ArtifactDigest::Create<ObjectType::File>( + HashFunction::Instance(), link.target())), /*is_executable=*/false)) { return false; } @@ -113,8 +114,8 @@ requires(kIsLocalGeneration) auto LocalAC<kDoGlobalUplink>::LocalUplinkEntry( for (auto const& link : result->output_directory_symlinks()) { if (not cas_.LocalUplinkBlob( latest.cas_, - bazel_re::Digest( - ArtifactDigest::Create<ObjectType::File>(link.target())), + bazel_re::Digest(ArtifactDigest::Create<ObjectType::File>( + HashFunction::Instance(), link.target())), /*is_executable=*/false)) { return false; } diff --git a/src/buildtool/storage/local_cas.tpp b/src/buildtool/storage/local_cas.tpp index 8bb04049..54807580 100644 --- a/src/buildtool/storage/local_cas.tpp +++ b/src/buildtool/storage/local_cas.tpp @@ -19,6 +19,7 @@ #include <utility> // std::move #include "fmt/core.h" +#include "src/buildtool/crypto/hash_function.hpp" #include "src/buildtool/logging/log_level.hpp" #include "src/buildtool/storage/local_cas.hpp" @@ -374,7 +375,8 @@ auto LocalCAS<kDoGlobalUplink>::Splice( // methods can refer to a file that existed before. The direct hash // calculation is done instead. auto const& file_path = large_object.GetPath(); - auto spliced_digest = ArtifactDigest::CreateFromFile<kType>(file_path); + auto spliced_digest = ArtifactDigest::CreateFromFile<kType>( + HashFunction::Instance(), file_path); if (not spliced_digest) { return unexpected{LargeObjectError{LargeObjectErrorCode::Internal, "could not calculate digest"}}; |