From 7321beb731e5f09584baaf77554cbfe1c470742f Mon Sep 17 00:00:00 2001 From: Maksim Denisov Date: Tue, 14 Jan 2025 13:05:19 +0100 Subject: TreeStructure: Compute on serve --- .../serve_api/remote/source_tree_client.cpp | 37 ++++++++++++++++++++++ 1 file changed, 37 insertions(+) (limited to 'src/buildtool/serve_api/remote/source_tree_client.cpp') diff --git a/src/buildtool/serve_api/remote/source_tree_client.cpp b/src/buildtool/serve_api/remote/source_tree_client.cpp index 73114350..bdf3fa57 100644 --- a/src/buildtool/serve_api/remote/source_tree_client.cpp +++ b/src/buildtool/serve_api/remote/source_tree_client.cpp @@ -360,4 +360,41 @@ auto SourceTreeClient::GetRemoteTree( return true; } +auto SourceTreeClient::ComputeTreeStructure(ArtifactDigest const& tree) + const noexcept -> expected { + justbuild::just_serve::ComputeTreeStructureRequest request{}; + request.set_tree(tree.hash()); + + grpc::ClientContext context; + justbuild::just_serve::ComputeTreeStructureResponse response; + grpc::Status status = + stub_->ComputeTreeStructure(&context, request, &response); + + if (not status.ok()) { + LogStatus(&logger_, LogLevel::Debug, status); + return unexpected{GitLookupError::Fatal}; + } + if (response.status() != + ::justbuild::just_serve::ComputeTreeStructureResponse::OK) { + logger_.Emit(LogLevel::Debug, + "ComputeTreeStructure response returned with {}", + static_cast(response.status())); + return unexpected{response.status() != + ::justbuild::just_serve:: + ComputeTreeStructureResponse::NOT_FOUND + ? GitLookupError::Fatal + : GitLookupError::NotFound}; + } + // ComputeTreeStructure operates on git digests. + auto digest = ArtifactDigestFactory::Create(HashFunction::Type::GitSHA1, + response.tree_structure_hash(), + /*size_unknown=*/0, + /*is_tree=*/true); + if (not digest) { + logger_.Emit(LogLevel::Debug, std::move(digest).error()); + return unexpected{GitLookupError::Fatal}; + } + return *std::move(digest); +} + #endif // BOOTSTRAP_BUILD_TOOL -- cgit v1.2.3