diff options
author | Paul Cristian Sarbu <paul.cristian.sarbu@huawei.com> | 2024-01-10 16:44:42 +0100 |
---|---|---|
committer | Paul Cristian Sarbu <paul.cristian.sarbu@huawei.com> | 2024-01-26 14:51:43 +0100 |
commit | debbc9dd20156b5ba94946c4cc2f689a8e163a2b (patch) | |
tree | ba05d72f82a4a80bdedd8f5545a942a8b4b1821c /src/buildtool/serve_api/remote/source_tree_client.cpp | |
parent | 81ce4543ad0761adbf5a0dfcf94078b88aa88bc0 (diff) | |
download | justbuild-debbc9dd20156b5ba94946c4cc2f689a8e163a2b.tar.gz |
serve source tree: Client-side and API implementations of to_git pragma-related RPCs
Diffstat (limited to 'src/buildtool/serve_api/remote/source_tree_client.cpp')
-rw-r--r-- | src/buildtool/serve_api/remote/source_tree_client.cpp | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/src/buildtool/serve_api/remote/source_tree_client.cpp b/src/buildtool/serve_api/remote/source_tree_client.cpp index 439612bd..073181a0 100644 --- a/src/buildtool/serve_api/remote/source_tree_client.cpp +++ b/src/buildtool/serve_api/remote/source_tree_client.cpp @@ -193,3 +193,53 @@ auto SourceTreeClient::ServeTree(std::string const& tree_id) -> bool { } return true; } + +auto SourceTreeClient::CheckRootTree(std::string const& tree_id) + -> std::optional<bool> { + justbuild::just_serve::CheckRootTreeRequest request{}; + request.set_tree(tree_id); + + grpc::ClientContext context; + justbuild::just_serve::CheckRootTreeResponse response; + grpc::Status status = stub_->CheckRootTree(&context, request, &response); + + if (not status.ok()) { + LogStatus(&logger_, LogLevel::Debug, status); + return std::nullopt; + } + if (response.status() != + ::justbuild::just_serve::CheckRootTreeResponse::OK) { + if (response.status() != + ::justbuild::just_serve::CheckRootTreeResponse::NOT_FOUND) { + logger_.Emit(LogLevel::Debug, + "CheckRootTree response returned with {}", + static_cast<int>(response.status())); + return std::nullopt; // tree lookup failed + } + return false; // tree not found + } + return true; // tree found +} + +auto SourceTreeClient::GetRemoteTree(std::string const& tree_id) -> bool { + justbuild::just_serve::GetRemoteTreeRequest request{}; + request.set_tree(tree_id); + + grpc::ClientContext context; + justbuild::just_serve::GetRemoteTreeResponse response; + grpc::Status status = stub_->GetRemoteTree(&context, request, &response); + + if (not status.ok()) { + LogStatus(&logger_, LogLevel::Debug, status); + return false; + } + if (response.status() != + ::justbuild::just_serve::GetRemoteTreeResponse::OK) { + logger_.Emit(LogLevel::Debug, + "GetRemoteTree response returned with {}", + static_cast<int>(response.status())); + return false; // retrieving tree or import-to-git failed + } + // success! + return true; +} |