summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/buildtool/serve_api/remote/serve_api.hpp10
-rw-r--r--src/buildtool/serve_api/remote/source_tree_client.cpp50
-rw-r--r--src/buildtool/serve_api/remote/source_tree_client.hpp15
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"};