summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/buildtool/execution_api/remote/bazel/bazel_network_reader.hpp12
-rw-r--r--src/buildtool/execution_api/remote/bazel/bazel_response.cpp26
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();