summaryrefslogtreecommitdiff
path: root/src/buildtool/execution_api/remote/bazel
diff options
context:
space:
mode:
Diffstat (limited to 'src/buildtool/execution_api/remote/bazel')
-rw-r--r--src/buildtool/execution_api/remote/bazel/bazel_cas_client.cpp18
-rw-r--r--src/buildtool/execution_api/remote/bazel/bazel_response.cpp8
-rw-r--r--src/buildtool/execution_api/remote/bazel/bytestream_client.hpp12
3 files changed, 26 insertions, 12 deletions
diff --git a/src/buildtool/execution_api/remote/bazel/bazel_cas_client.cpp b/src/buildtool/execution_api/remote/bazel/bazel_cas_client.cpp
index dd4ec919..a02b8d4c 100644
--- a/src/buildtool/execution_api/remote/bazel/bazel_cas_client.cpp
+++ b/src/buildtool/execution_api/remote/bazel/bazel_cas_client.cpp
@@ -36,6 +36,7 @@
#include "src/buildtool/file_system/object_type.hpp"
#include "src/buildtool/logging/log_level.hpp"
#include "src/utils/cpp/back_map.hpp"
+#include "src/utils/cpp/expected.hpp"
namespace {
@@ -302,12 +303,19 @@ auto BazelCasClient::BatchReadBlobs(
std::vector<ArtifactBlob>* v,
bazel_re::BatchReadBlobsResponse_Response const&
r) {
- if (auto value =
- back_map->GetReference(r.digest())) {
- v->emplace_back(*value.value(),
- r.data(),
- /*is_exec=*/false);
+ auto ref = back_map->GetReference(r.digest());
+ if (not ref.has_value()) {
+ return;
}
+ auto blob = ArtifactBlob::FromMemory(
+ HashFunction{ref.value()->GetHashType()},
+ ref.value()->IsTree() ? ObjectType::Tree
+ : ObjectType::File,
+ r.data());
+ if (not blob.has_value()) {
+ return;
+ }
+ v->emplace_back(*std::move(blob));
});
if (batch_response.ok) {
std::move(batch_response.result.begin(),
diff --git a/src/buildtool/execution_api/remote/bazel/bazel_response.cpp b/src/buildtool/execution_api/remote/bazel/bazel_response.cpp
index f06a4275..d0429cd7 100644
--- a/src/buildtool/execution_api/remote/bazel/bazel_response.cpp
+++ b/src/buildtool/execution_api/remote/bazel/bazel_response.cpp
@@ -50,12 +50,8 @@ auto ProcessDirectoryMessage(HashFunction hash_function,
fmt::format("found invalid symlink at {}", link.name())};
}
}
- auto data = dir.SerializeAsString();
- auto digest = ArtifactDigestFactory::HashDataAs<ObjectType::File>(
- hash_function, data);
- return ArtifactBlob{std::move(digest),
- std::move(data),
- /*is_exec=*/false};
+ return ArtifactBlob::FromMemory(
+ hash_function, ObjectType::File, dir.SerializeAsString());
}
} // namespace
diff --git a/src/buildtool/execution_api/remote/bazel/bytestream_client.hpp b/src/buildtool/execution_api/remote/bazel/bytestream_client.hpp
index 23a296c9..cf85b769 100644
--- a/src/buildtool/execution_api/remote/bazel/bytestream_client.hpp
+++ b/src/buildtool/execution_api/remote/bazel/bytestream_client.hpp
@@ -33,8 +33,10 @@
#include "src/buildtool/common/artifact_digest.hpp"
#include "src/buildtool/common/remote/client_common.hpp"
#include "src/buildtool/common/remote/port.hpp"
+#include "src/buildtool/crypto/hash_function.hpp"
#include "src/buildtool/execution_api/common/bytestream_utils.hpp"
#include "src/buildtool/execution_api/common/ids.hpp"
+#include "src/buildtool/file_system/object_type.hpp"
#include "src/buildtool/logging/log_level.hpp"
#include "src/buildtool/logging/logger.hpp"
#include "src/utils/cpp/expected.hpp"
@@ -115,7 +117,15 @@ class ByteStreamClient {
if (not data) {
return std::nullopt;
}
- return ArtifactBlob{digest, std::move(output), /*is_exec=*/false};
+
+ auto blob = ArtifactBlob::FromMemory(
+ HashFunction{digest.GetHashType()},
+ digest.IsTree() ? ObjectType::Tree : ObjectType::File,
+ std::move(output));
+ if (not blob.has_value() or blob->GetDigest() != digest) {
+ return std::nullopt;
+ }
+ return *std::move(blob);
}
[[nodiscard]] auto Write(std::string const& instance_name,