diff options
author | Maksim Denisov <denisov.maksim@huawei.com> | 2025-01-23 14:33:45 +0100 |
---|---|---|
committer | Maksim Denisov <denisov.maksim@huawei.com> | 2025-02-07 14:58:04 +0100 |
commit | d5a957afddb68c216184dff0e90e16c083be1134 (patch) | |
tree | 0ac4ce7d7d3ce6f26896027a67aedc4cc0ced2e7 /src | |
parent | 0ce9e40d44834e9590e0a74e63ea19274fa7f2bb (diff) | |
download | justbuild-d5a957afddb68c216184dff0e90e16c083be1134.tar.gz |
BazelNetworkReader: make reading methods that use bazel digest private
Diffstat (limited to 'src')
-rw-r--r-- | src/buildtool/execution_api/remote/bazel/bazel_network_reader.hpp | 12 | ||||
-rw-r--r-- | src/buildtool/execution_api/remote/bazel/bazel_response.cpp | 26 |
2 files changed, 22 insertions, 16 deletions
diff --git a/src/buildtool/execution_api/remote/bazel/bazel_network_reader.hpp b/src/buildtool/execution_api/remote/bazel/bazel_network_reader.hpp index 0bfa9a84..54be0008 100644 --- a/src/buildtool/execution_api/remote/bazel/bazel_network_reader.hpp +++ b/src/buildtool/execution_api/remote/bazel/bazel_network_reader.hpp @@ -74,9 +74,6 @@ class BazelNetworkReader final { [[nodiscard]] auto IsNativeProtocol() const noexcept -> bool; - [[nodiscard]] auto ReadSingleBlob(bazel_re::Digest const& digest) - const noexcept -> std::optional<ArtifactBlob>; - [[nodiscard]] auto ReadSingleBlob(ArtifactDigest const& digest) const noexcept -> std::optional<ArtifactBlob>; @@ -84,9 +81,6 @@ class BazelNetworkReader final { std::vector<ArtifactDigest> const& digests) const noexcept -> IncrementalReader; - [[nodiscard]] auto ReadIncrementally(std::vector<bazel_re::Digest> digests) - const noexcept -> IncrementalReader; - private: using DirectoryMap = std::unordered_map<ArtifactDigest, bazel_re::Directory>; @@ -100,10 +94,16 @@ class BazelNetworkReader final { std::vector<bazel_re::Directory>&& full_tree) const noexcept -> std::optional<DirectoryMap>; + [[nodiscard]] auto ReadSingleBlob(bazel_re::Digest const& digest) + const noexcept -> std::optional<ArtifactBlob>; + [[nodiscard]] auto BatchReadBlobs( std::vector<bazel_re::Digest> const& blobs) const noexcept -> std::vector<ArtifactBlob>; + [[nodiscard]] auto ReadIncrementally(std::vector<bazel_re::Digest> digests) + const noexcept -> IncrementalReader; + [[nodiscard]] auto Validate(BazelBlob const& blob) const noexcept -> std::optional<HashInfo>; }; diff --git a/src/buildtool/execution_api/remote/bazel/bazel_response.cpp b/src/buildtool/execution_api/remote/bazel/bazel_response.cpp index 2ea2ce1b..ad418000 100644 --- a/src/buildtool/execution_api/remote/bazel/bazel_response.cpp +++ b/src/buildtool/execution_api/remote/bazel/bazel_response.cpp @@ -14,12 +14,10 @@ #include "src/buildtool/execution_api/remote/bazel/bazel_response.hpp" -#include <algorithm> #include <cstddef> #include <exception> #include <filesystem> #include <functional> -#include <iterator> #include <unordered_set> #include <vector> @@ -66,9 +64,13 @@ auto ProcessDirectoryMessage(HashFunction hash_function, auto BazelResponse::ReadStringBlob(bazel_re::Digest const& id) noexcept -> std::string { - auto reader = network_->CreateReader(); - if (auto blob = reader.ReadSingleBlob(id)) { - return *blob->data; + auto digest = ArtifactDigestFactory::FromBazel( + network_->GetHashFunction().GetType(), id); + if (digest.has_value()) { + auto reader = network_->CreateReader(); + if (auto blob = reader.ReadSingleBlob(*digest)) { + return *blob->data; + } } Logger::Log(LogLevel::Warning, "reading digest {} from action response failed", @@ -221,13 +223,17 @@ auto BazelResponse::Populate() noexcept -> std::optional<std::string> { } // obtain tree digests for output directories - std::vector<bazel_re::Digest> tree_digests{}; + std::vector<ArtifactDigest> tree_digests{}; tree_digests.reserve( gsl::narrow<std::size_t>(action_result.output_directories_size())); - std::transform(action_result.output_directories().begin(), - action_result.output_directories().end(), - std::back_inserter(tree_digests), - [](auto dir) { return dir.tree_digest(); }); + for (auto const& directory : action_result.output_directories()) { + auto digest = ArtifactDigestFactory::FromBazel( + network_->GetHashFunction().GetType(), directory.tree_digest()); + if (not digest) { + return std::move(digest).error(); + } + tree_digests.push_back(*std::move(digest)); + } // collect root digests from trees and store them auto reader = network_->CreateReader(); |