diff options
author | Sascha Roloff <sascha.roloff@huawei.com> | 2024-02-23 16:10:26 +0100 |
---|---|---|
committer | Sascha Roloff <sascha.roloff@huawei.com> | 2024-02-26 17:16:21 +0100 |
commit | df8c8411e208fd84c0084cf92a093c3f08c07d02 (patch) | |
tree | 58908f0ed9e876808896ba23b7321e2c70d797de /src/buildtool/execution_api/remote/bazel/bazel_api.cpp | |
parent | 0d98a04c28eeb18d08f731c3f94de825d49daac5 (diff) | |
download | justbuild-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.cpp | 24 |
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(); +} |