From c8c6f73674c9b1d6a35a8ef6d0bec9b5d216e443 Mon Sep 17 00:00:00 2001 From: Paul Cristian Sarbu Date: Tue, 5 Dec 2023 12:00:08 +0100 Subject: just serve: Implement client-side ServeTree and extend serve API --- src/buildtool/serve_api/remote/serve_api.hpp | 5 +++++ .../serve_api/remote/source_tree_client.cpp | 21 +++++++++++++++++++++ .../serve_api/remote/source_tree_client.hpp | 6 ++++++ 3 files changed, 32 insertions(+) (limited to 'src') diff --git a/src/buildtool/serve_api/remote/serve_api.hpp b/src/buildtool/serve_api/remote/serve_api.hpp index fce7611d..b4c03ba5 100644 --- a/src/buildtool/serve_api/remote/serve_api.hpp +++ b/src/buildtool/serve_api/remote/serve_api.hpp @@ -61,6 +61,11 @@ class ServeApi final { return Instance().stc_->ServeContent(content); } + [[nodiscard]] static auto TreeInRemoteCAS(std::string const& tree_id) + -> bool { + return Instance().stc_->ServeTree(tree_id); + } + [[nodiscard]] static auto ServeTargetVariables( std::string const& target_root_id, std::string const& target_file, diff --git a/src/buildtool/serve_api/remote/source_tree_client.cpp b/src/buildtool/serve_api/remote/source_tree_client.cpp index e3cc0756..8f4d4960 100644 --- a/src/buildtool/serve_api/remote/source_tree_client.cpp +++ b/src/buildtool/serve_api/remote/source_tree_client.cpp @@ -142,3 +142,24 @@ auto SourceTreeClient::ServeContent(std::string const& content) -> bool { } return true; } + +auto SourceTreeClient::ServeTree(std::string const& tree_id) -> bool { + justbuild::just_serve::ServeTreeRequest request{}; + request.set_tree(tree_id); + + grpc::ClientContext context; + justbuild::just_serve::ServeTreeResponse response; + grpc::Status status = stub_->ServeTree(&context, request, &response); + + if (not status.ok()) { + LogStatus(&logger_, LogLevel::Debug, status); + return false; + } + if (response.status() != ::justbuild::just_serve::ServeTreeResponse::OK) { + logger_.Emit(LogLevel::Debug, + "ServeTree response returned with {}", + static_cast(response.status())); + return false; + } + return true; +} diff --git a/src/buildtool/serve_api/remote/source_tree_client.hpp b/src/buildtool/serve_api/remote/source_tree_client.hpp index e240a45a..a9b28807 100644 --- a/src/buildtool/serve_api/remote/source_tree_client.hpp +++ b/src/buildtool/serve_api/remote/source_tree_client.hpp @@ -60,6 +60,12 @@ class SourceTreeClient { /// \returns Flag to state whether content is in remote CAS. [[nodiscard]] auto ServeContent(std::string const& content) -> bool; + /// \brief Make a given tree available in remote CAS, if known by serve + /// remote. + /// \param[in] tree_id Identifier of the Git tree to look up. + /// \returns Flag to state whether tree is in remote CAS. + [[nodiscard]] auto ServeTree(std::string const& tree_id) -> bool; + private: std::unique_ptr stub_; Logger logger_{"RemoteSourceTreeClient"}; -- cgit v1.2.3