summaryrefslogtreecommitdiff
path: root/src/buildtool/serve_api/serve_service/source_tree.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/buildtool/serve_api/serve_service/source_tree.cpp')
-rw-r--r--src/buildtool/serve_api/serve_service/source_tree.cpp106
1 files changed, 102 insertions, 4 deletions
diff --git a/src/buildtool/serve_api/serve_service/source_tree.cpp b/src/buildtool/serve_api/serve_service/source_tree.cpp
index 8bc06c39..a6514c46 100644
--- a/src/buildtool/serve_api/serve_service/source_tree.cpp
+++ b/src/buildtool/serve_api/serve_service/source_tree.cpp
@@ -214,14 +214,30 @@ auto SourceTreeService::ServeCommitTree(
auto res = GetSubtreeFromCommit(
native_context_->storage_config->GitRoot(), commit, subdir, logger_);
if (res) {
- auto tree_id = *std::move(res);
+ auto const tree_id = *std::move(res);
auto status = ServeCommitTreeResponse::OK;
if (request->sync_tree()) {
status =
SyncGitEntryToCas<ObjectType::Tree, ServeCommitTreeResponse>(
tree_id, native_context_->storage_config->GitRoot());
+ if (status == ServeCommitTreeResponse::OK) {
+ // set digest in response
+ auto digest = ArtifactDigestFactory::Create(
+ native_context_->storage_config->hash_function.GetType(),
+ tree_id,
+ /*size is unknown*/ 0,
+ /*is_tree=*/true);
+ if (not digest) {
+ logger_->Emit(LogLevel::Error, std::move(digest).error());
+ response->set_status(
+ ServeCommitTreeResponse::INTERNAL_ERROR);
+ return ::grpc::Status::OK;
+ }
+ *(response->mutable_digest()) =
+ ArtifactDigestFactory::ToBazel(*std::move(digest));
+ }
}
- *(response->mutable_tree()) = std::move(tree_id);
+ *(response->mutable_tree()) = tree_id;
response->set_status(status);
return ::grpc::Status::OK;
}
@@ -240,14 +256,32 @@ auto SourceTreeService::ServeCommitTree(
for (auto const& path : serve_config_.known_repositories) {
auto res = GetSubtreeFromCommit(path, commit, subdir, logger_);
if (res) {
- auto tree_id = *std::move(res);
+ auto const tree_id = *std::move(res);
auto status = ServeCommitTreeResponse::OK;
if (request->sync_tree()) {
status =
SyncGitEntryToCas<ObjectType::Tree,
ServeCommitTreeResponse>(tree_id, path);
+ if (status == ServeCommitTreeResponse::OK) {
+ // set digest in response
+ auto digest = ArtifactDigestFactory::Create(
+ native_context_->storage_config->hash_function
+ .GetType(),
+ tree_id,
+ /*size is unknown*/ 0,
+ /*is_tree=*/true);
+ if (not digest) {
+ logger_->Emit(LogLevel::Error,
+ std::move(digest).error());
+ response->set_status(
+ ServeCommitTreeResponse::INTERNAL_ERROR);
+ return ::grpc::Status::OK;
+ }
+ *(response->mutable_digest()) =
+ ArtifactDigestFactory::ToBazel(*std::move(digest));
+ }
}
- *(response->mutable_tree()) = std::move(tree_id);
+ *(response->mutable_tree()) = tree_id;
response->set_status(status);
return ::grpc::Status::OK;
}
@@ -277,6 +311,21 @@ auto SourceTreeService::SyncArchive(std::string const& tree_id,
if (sync_tree) {
status = SyncGitEntryToCas<ObjectType::Tree, ServeArchiveTreeResponse>(
tree_id, repo_path);
+ if (status == ServeArchiveTreeResponse::OK) {
+ // set digest in response
+ auto digest = ArtifactDigestFactory::Create(
+ native_context_->storage_config->hash_function.GetType(),
+ tree_id,
+ /*size is unknown*/ 0,
+ /*is_tree=*/true);
+ if (not digest) {
+ logger_->Emit(LogLevel::Error, std::move(digest).error());
+ response->set_status(ServeArchiveTreeResponse::INTERNAL_ERROR);
+ return ::grpc::Status::OK;
+ }
+ *(response->mutable_digest()) =
+ ArtifactDigestFactory::ToBazel(*std::move(digest));
+ }
}
*(response->mutable_tree()) = tree_id;
response->set_status(status);
@@ -992,6 +1041,21 @@ auto SourceTreeService::DistdirImportToGit(
if (sync_tree) {
status = SyncGitEntryToCas<ObjectType::Tree, ServeDistdirTreeResponse>(
tree_id, native_context_->storage_config->GitRoot());
+ if (status == ServeDistdirTreeResponse::OK) {
+ // set digest in response
+ auto digest = ArtifactDigestFactory::Create(
+ native_context_->storage_config->hash_function.GetType(),
+ tree_id,
+ /*size is unknown*/ 0,
+ /*is_tree=*/true);
+ if (not digest) {
+ logger_->Emit(LogLevel::Error, std::move(digest).error());
+ response->set_status(ServeDistdirTreeResponse::INTERNAL_ERROR);
+ return ::grpc::Status::OK;
+ }
+ *(response->mutable_digest()) =
+ ArtifactDigestFactory::ToBazel(*std::move(digest));
+ }
}
// set response on success
*(response->mutable_tree()) = std::move(tree_id);
@@ -1200,6 +1264,22 @@ auto SourceTreeService::ServeDistdirTree(
status =
SyncGitEntryToCas<ObjectType::Tree, ServeDistdirTreeResponse>(
tree_id, native_context_->storage_config->GitRoot());
+ if (status == ServeDistdirTreeResponse::OK) {
+ // set digest in response
+ auto digest = ArtifactDigestFactory::Create(
+ native_context_->storage_config->hash_function.GetType(),
+ tree_id,
+ /*size is unknown*/ 0,
+ /*is_tree=*/true);
+ if (not digest) {
+ logger_->Emit(LogLevel::Error, std::move(digest).error());
+ response->set_status(
+ ServeDistdirTreeResponse::INTERNAL_ERROR);
+ return ::grpc::Status::OK;
+ }
+ *(response->mutable_digest()) =
+ ArtifactDigestFactory::ToBazel(*std::move(digest));
+ }
}
// set response on success
*(response->mutable_tree()) = std::move(tree_id);
@@ -1224,6 +1304,24 @@ auto SourceTreeService::ServeDistdirTree(
status =
SyncGitEntryToCas<ObjectType::Tree,
ServeDistdirTreeResponse>(tree_id, path);
+ if (status == ServeDistdirTreeResponse::OK) {
+ // set digest in response
+ auto digest = ArtifactDigestFactory::Create(
+ native_context_->storage_config->hash_function
+ .GetType(),
+ tree_id,
+ /*size is unknown*/ 0,
+ /*is_tree=*/true);
+ if (not digest) {
+ logger_->Emit(LogLevel::Error,
+ std::move(digest).error());
+ response->set_status(
+ ServeDistdirTreeResponse::INTERNAL_ERROR);
+ return ::grpc::Status::OK;
+ }
+ *(response->mutable_digest()) =
+ ArtifactDigestFactory::ToBazel(*std::move(digest));
+ }
}
// set response on success
*(response->mutable_tree()) = std::move(tree_id);