summaryrefslogtreecommitdiff
path: root/src/buildtool/execution_api/remote/bazel/bazel_api.cpp
diff options
context:
space:
mode:
authorSascha Roloff <sascha.roloff@huawei.com>2024-02-23 16:10:26 +0100
committerSascha Roloff <sascha.roloff@huawei.com>2024-02-26 17:16:21 +0100
commitdf8c8411e208fd84c0084cf92a093c3f08c07d02 (patch)
tree58908f0ed9e876808896ba23b7321e2c70d797de /src/buildtool/execution_api/remote/bazel/bazel_api.cpp
parent0d98a04c28eeb18d08f731c3f94de825d49daac5 (diff)
downloadjustbuild-df8c8411e208fd84c0084cf92a093c3f08c07d02.tar.gz
Implement blob splicing protocol at just client side
Diffstat (limited to 'src/buildtool/execution_api/remote/bazel/bazel_api.cpp')
-rw-r--r--src/buildtool/execution_api/remote/bazel/bazel_api.cpp24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/buildtool/execution_api/remote/bazel/bazel_api.cpp b/src/buildtool/execution_api/remote/bazel/bazel_api.cpp
index 157016f7..afbc9d2e 100644
--- a/src/buildtool/execution_api/remote/bazel/bazel_api.cpp
+++ b/src/buildtool/execution_api/remote/bazel/bazel_api.cpp
@@ -599,3 +599,27 @@ auto BazelApi::CreateAction(
[[nodiscard]] auto BazelApi::BlobSplitSupport() const noexcept -> bool {
return network_->BlobSplitSupport();
}
+
+[[nodiscard]] auto BazelApi::SpliceBlob(
+ ArtifactDigest const& blob_digest,
+ std::vector<ArtifactDigest> const& chunk_digests) const noexcept
+ -> std::optional<ArtifactDigest> {
+ auto digests = std::vector<bazel_re::Digest>{};
+ digests.reserve(chunk_digests.size());
+ std::transform(chunk_digests.cbegin(),
+ chunk_digests.cend(),
+ std::back_inserter(digests),
+ [](auto const& artifact_digest) {
+ return static_cast<bazel_re::Digest>(artifact_digest);
+ });
+ auto digest = network_->SpliceBlob(
+ static_cast<bazel_re::Digest>(blob_digest), digests);
+ if (not digest) {
+ return std::nullopt;
+ }
+ return ArtifactDigest{*digest};
+}
+
+[[nodiscard]] auto BazelApi::BlobSpliceSupport() const noexcept -> bool {
+ return network_->BlobSpliceSupport();
+}