summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/buildtool/serve_api/remote/serve_api.hpp5
-rw-r--r--src/buildtool/serve_api/remote/source_tree_client.cpp22
-rw-r--r--src/buildtool/serve_api/remote/source_tree_client.hpp6
3 files changed, 33 insertions, 0 deletions
diff --git a/src/buildtool/serve_api/remote/serve_api.hpp b/src/buildtool/serve_api/remote/serve_api.hpp
index 48ba4098..16b998b4 100644
--- a/src/buildtool/serve_api/remote/serve_api.hpp
+++ b/src/buildtool/serve_api/remote/serve_api.hpp
@@ -56,6 +56,11 @@ class ServeApi final {
content, archive_type, subdir, resolve_symlinks, sync_tree);
}
+ [[nodiscard]] static auto ContentInRemoteCAS(std::string const& content)
+ -> bool {
+ return Instance().stc_->ServeContent(content);
+ }
+
[[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 a2ff930f..e3cc0756 100644
--- a/src/buildtool/serve_api/remote/source_tree_client.cpp
+++ b/src/buildtool/serve_api/remote/source_tree_client.cpp
@@ -120,3 +120,25 @@ auto SourceTreeClient::ServeArchiveTree(
}
return response.tree();
}
+
+auto SourceTreeClient::ServeContent(std::string const& content) -> bool {
+ justbuild::just_serve::ServeContentRequest request{};
+ request.set_content(content);
+
+ grpc::ClientContext context;
+ justbuild::just_serve::ServeContentResponse response;
+ grpc::Status status = stub_->ServeContent(&context, request, &response);
+
+ if (not status.ok()) {
+ LogStatus(&logger_, LogLevel::Debug, status);
+ return false;
+ }
+ if (response.status() !=
+ ::justbuild::just_serve::ServeContentResponse::OK) {
+ logger_.Emit(LogLevel::Debug,
+ "ServeContent response returned with {}",
+ static_cast<int>(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 2a7f1ec2..e240a45a 100644
--- a/src/buildtool/serve_api/remote/source_tree_client.hpp
+++ b/src/buildtool/serve_api/remote/source_tree_client.hpp
@@ -54,6 +54,12 @@ class SourceTreeClient {
std::optional<PragmaSpecial> const& resolve_symlinks,
bool sync_tree) -> std::optional<std::string>;
+ /// \brief Make a given content blob available in remote CAS, if known by
+ /// serve remote.
+ /// \param[in] content Hash of the archive content to look up.
+ /// \returns Flag to state whether content is in remote CAS.
+ [[nodiscard]] auto ServeContent(std::string const& content) -> bool;
+
private:
std::unique_ptr<justbuild::just_serve::SourceTree::Stub> stub_;
Logger logger_{"RemoteSourceTreeClient"};