summaryrefslogtreecommitdiff
path: root/src/buildtool/serve_api/remote/source_tree_client.cpp
diff options
context:
space:
mode:
authorPaul Cristian Sarbu <paul.cristian.sarbu@huawei.com>2024-10-24 11:21:23 +0200
committerPaul Cristian Sarbu <paul.cristian.sarbu@huawei.com>2024-10-25 13:00:43 +0200
commitb98addc8f8e3e62e1213cd967f20aa631057f84e (patch)
treed4e7399fc4a02fa4e0e0684a1cdfa2bfa35673c3 /src/buildtool/serve_api/remote/source_tree_client.cpp
parent4018960c59d3fd0702c714e404ac913b2e83c3f5 (diff)
downloadjustbuild-b98addc8f8e3e62e1213cd967f20aa631057f84e.tar.gz
serve service: Respond with digest for blob and tree checks
...to be able to interrogate remotes irrespective of protocol. When serve endpoint is active, it will provide the correct digest with which to interrogate the remote endpoint. Otherwise, for a compatible remote check the file mappings for the correct digest. The serve service proto file is updated accordingly.
Diffstat (limited to 'src/buildtool/serve_api/remote/source_tree_client.cpp')
-rw-r--r--src/buildtool/serve_api/remote/source_tree_client.cpp36
1 files changed, 28 insertions, 8 deletions
diff --git a/src/buildtool/serve_api/remote/source_tree_client.cpp b/src/buildtool/serve_api/remote/source_tree_client.cpp
index f3538ca3..5f0bce80 100644
--- a/src/buildtool/serve_api/remote/source_tree_client.cpp
+++ b/src/buildtool/serve_api/remote/source_tree_client.cpp
@@ -239,7 +239,7 @@ auto SourceTreeClient::ServeForeignFileTree(const std::string& content,
}
auto SourceTreeClient::ServeContent(std::string const& content) const noexcept
- -> bool {
+ -> expected<ArtifactDigest, GitLookupError> {
justbuild::just_serve::ServeContentRequest request{};
request.set_content(content);
@@ -249,20 +249,30 @@ auto SourceTreeClient::ServeContent(std::string const& content) const noexcept
if (not status.ok()) {
LogStatus(&logger_, LogLevel::Debug, status);
- return false;
+ return unexpected{GitLookupError::Fatal};
}
if (response.status() !=
::justbuild::just_serve::ServeContentResponse::OK) {
logger_.Emit(LogLevel::Debug,
"ServeContent response returned with {}",
static_cast<int>(response.status()));
- return false;
+ return unexpected{
+ response.status() !=
+ ::justbuild::just_serve::ServeContentResponse::NOT_FOUND
+ ? GitLookupError::Fatal
+ : GitLookupError::NotFound};
}
- return true;
+ auto digest = ArtifactDigestFactory::FromBazel(hash_function_.GetType(),
+ response.digest());
+ if (not digest) {
+ logger_.Emit(LogLevel::Debug, std::move(digest).error());
+ return unexpected{GitLookupError::Fatal};
+ }
+ return *std::move(digest); // success
}
auto SourceTreeClient::ServeTree(std::string const& tree_id) const noexcept
- -> bool {
+ -> expected<ArtifactDigest, GitLookupError> {
justbuild::just_serve::ServeTreeRequest request{};
request.set_tree(tree_id);
@@ -272,15 +282,25 @@ auto SourceTreeClient::ServeTree(std::string const& tree_id) const noexcept
if (not status.ok()) {
LogStatus(&logger_, LogLevel::Debug, status);
- return false;
+ return unexpected{GitLookupError::Fatal};
}
if (response.status() != ::justbuild::just_serve::ServeTreeResponse::OK) {
logger_.Emit(LogLevel::Debug,
"ServeTree response returned with {}",
static_cast<int>(response.status()));
- return false;
+ return unexpected{
+ response.status() !=
+ ::justbuild::just_serve::ServeTreeResponse::NOT_FOUND
+ ? GitLookupError::Fatal
+ : GitLookupError::NotFound};
}
- return true;
+ auto digest = ArtifactDigestFactory::FromBazel(hash_function_.GetType(),
+ response.digest());
+ if (not digest) {
+ logger_.Emit(LogLevel::Debug, std::move(digest).error());
+ return unexpected{GitLookupError::Fatal};
+ }
+ return *std::move(digest); // success
}
auto SourceTreeClient::CheckRootTree(std::string const& tree_id) const noexcept