diff options
-rw-r--r-- | src/buildtool/serve_api/remote/serve_api.hpp | 10 | ||||
-rw-r--r-- | src/buildtool/serve_api/remote/source_tree_client.cpp | 50 | ||||
-rw-r--r-- | src/buildtool/serve_api/remote/source_tree_client.hpp | 15 |
3 files changed, 75 insertions, 0 deletions
diff --git a/src/buildtool/serve_api/remote/serve_api.hpp b/src/buildtool/serve_api/remote/serve_api.hpp index 965cf8df..44169223 100644 --- a/src/buildtool/serve_api/remote/serve_api.hpp +++ b/src/buildtool/serve_api/remote/serve_api.hpp @@ -75,6 +75,16 @@ class ServeApi final { return Instance().stc_->ServeTree(tree_id); } + [[nodiscard]] static auto CheckRootTree(std::string const& tree_id) + -> std::optional<bool> { + return Instance().stc_->CheckRootTree(tree_id); + } + + [[nodiscard]] static auto GetTreeFromRemote(std::string const& tree_id) + -> bool { + return Instance().stc_->GetRemoteTree(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 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; +} diff --git a/src/buildtool/serve_api/remote/source_tree_client.hpp b/src/buildtool/serve_api/remote/source_tree_client.hpp index a76d4135..3ea1058b 100644 --- a/src/buildtool/serve_api/remote/source_tree_client.hpp +++ b/src/buildtool/serve_api/remote/source_tree_client.hpp @@ -78,6 +78,21 @@ class SourceTreeClient { /// \returns Flag to state whether tree is in remote CAS. [[nodiscard]] auto ServeTree(std::string const& tree_id) -> bool; + /// \brief Checks if the serve endpoint has a given tree locally available + /// and makes it available for a serve-orchestrated build. + /// \param[in] tree_id Identifier of the Git tree to look up. + /// \returns Flag to state whether tree is known or not, or nullopt on + /// errors. + [[nodiscard]] auto CheckRootTree(std::string const& tree_id) + -> std::optional<bool>; + + /// \brief Retrieve tree from the CAS of the associated remote-execution + /// endpoint and makes it available for a serve-orchestrated build. + /// \param[in] tree_id Identifier of the Git tree to retrieve. + /// \returns Flag to state whether tree was successfully imported into the + /// local Git storage or not. + [[nodiscard]] auto GetRemoteTree(std::string const& tree_id) -> bool; + private: std::unique_ptr<justbuild::just_serve::SourceTree::Stub> stub_; Logger logger_{"RemoteSourceTreeClient"}; |