diff options
-rw-r--r-- | src/buildtool/serve_api/remote/TARGETS | 3 | ||||
-rw-r--r-- | src/buildtool/serve_api/remote/serve_api.hpp | 10 | ||||
-rw-r--r-- | src/buildtool/serve_api/remote/target_client.cpp | 21 | ||||
-rw-r--r-- | src/buildtool/serve_api/remote/target_client.hpp | 12 |
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"}; |