summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/buildtool/serve_api/remote/TARGETS3
-rw-r--r--src/buildtool/serve_api/remote/serve_api.hpp10
-rw-r--r--src/buildtool/serve_api/remote/target_client.cpp21
-rw-r--r--src/buildtool/serve_api/remote/target_client.hpp12
4 files changed, 45 insertions, 1 deletions
diff --git a/src/buildtool/serve_api/remote/TARGETS b/src/buildtool/serve_api/remote/TARGETS
index 1de01320..d0ef6aa5 100644
--- a/src/buildtool/serve_api/remote/TARGETS
+++ b/src/buildtool/serve_api/remote/TARGETS
@@ -27,7 +27,8 @@
, "name": ["serve_api"]
, "hdrs": ["serve_api.hpp"]
, "deps":
- [ ["src/buildtool/common/remote", "port"]
+ [ ["src/buildtool/common", "common"]
+ , ["src/buildtool/common/remote", "port"]
, ["src/buildtool/file_system/symlinks_map", "pragma_special"]
, "source_tree_client"
, "target_client"
diff --git a/src/buildtool/serve_api/remote/serve_api.hpp b/src/buildtool/serve_api/remote/serve_api.hpp
index b4c03ba5..50fdc4e3 100644
--- a/src/buildtool/serve_api/remote/serve_api.hpp
+++ b/src/buildtool/serve_api/remote/serve_api.hpp
@@ -19,6 +19,8 @@
#include <optional>
#include <string>
+#include "src/buildtool/common/artifact.hpp"
+#include "src/buildtool/common/artifact_digest.hpp"
#include "src/buildtool/common/remote/port.hpp"
#include "src/buildtool/file_system/symlinks_map/pragma_special.hpp"
#include "src/buildtool/serve_api/remote/config.hpp"
@@ -74,6 +76,14 @@ class ServeApi final {
target_root_id, target_file, target);
}
+ [[nodiscard]] static auto ServeTargetDescription(
+ std::string const& target_root_id,
+ std::string const& target_file,
+ std::string const& target) -> std::optional<ArtifactDigest> {
+ return Instance().tc_->ServeTargetDescription(
+ target_root_id, target_file, target);
+ }
+
[[nodiscard]] static auto ServeTarget(const TargetCacheKey& key,
const std::string& repo_key)
-> std::optional<std::pair<TargetCacheEntry, Artifact::ObjectInfo>> {
diff --git a/src/buildtool/serve_api/remote/target_client.cpp b/src/buildtool/serve_api/remote/target_client.cpp
index 7819efb6..e45c4669 100644
--- a/src/buildtool/serve_api/remote/target_client.cpp
+++ b/src/buildtool/serve_api/remote/target_client.cpp
@@ -149,3 +149,24 @@ auto TargetClient::ServeTargetVariables(std::string const& target_root_id,
}
return res;
}
+
+auto TargetClient::ServeTargetDescription(std::string const& target_root_id,
+ std::string const& target_file,
+ std::string const& target)
+ -> std::optional<ArtifactDigest> {
+ justbuild::just_serve::ServeTargetDescriptionRequest request{};
+ request.set_root_tree(target_root_id);
+ request.set_target_file(target_file);
+ request.set_target(target);
+
+ grpc::ClientContext context;
+ justbuild::just_serve::ServeTargetDescriptionResponse response;
+ grpc::Status status =
+ stub_->ServeTargetDescription(&context, request, &response);
+
+ if (not status.ok()) {
+ LogStatus(&logger_, LogLevel::Error, status);
+ return std::nullopt;
+ }
+ return ArtifactDigest{response.description_id()};
+}
diff --git a/src/buildtool/serve_api/remote/target_client.hpp b/src/buildtool/serve_api/remote/target_client.hpp
index 9219fb3d..66c6dcf2 100644
--- a/src/buildtool/serve_api/remote/target_client.hpp
+++ b/src/buildtool/serve_api/remote/target_client.hpp
@@ -23,6 +23,7 @@
#include "justbuild/just_serve/just_serve.grpc.pb.h"
#include "src/buildtool/common/artifact.hpp"
+#include "src/buildtool/common/artifact_digest.hpp"
#include "src/buildtool/common/remote/port.hpp"
#include "src/buildtool/execution_api/common/create_execution_api.hpp"
#include "src/buildtool/logging/logger.hpp"
@@ -54,6 +55,17 @@ class TargetClient {
std::string const& target)
-> std::optional<std::vector<std::string>>;
+ /// \brief Retrieve the artifact digest of the blob containing the export
+ /// target description fields required by just describe.
+ /// \param[in] target_root_id Hash of target-level root tree.
+ /// \param[in] target_file Relative path of the target file.
+ /// \param[in] target Name of the target to interrogate.
+ /// \returns The artifact digest, or nullopt on errors.
+ [[nodiscard]] auto ServeTargetDescription(std::string const& target_root_id,
+ std::string const& target_file,
+ std::string const& target)
+ -> std::optional<ArtifactDigest>;
+
private:
std::unique_ptr<justbuild::just_serve::Target::Stub> stub_;
Logger logger_{"RemoteTargetClient"};