diff options
Diffstat (limited to 'src/buildtool/execution_api')
-rw-r--r-- | src/buildtool/execution_api/local/local_api.cpp | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/buildtool/execution_api/local/local_api.cpp b/src/buildtool/execution_api/local/local_api.cpp index eef05021..3eede672 100644 --- a/src/buildtool/execution_api/local/local_api.cpp +++ b/src/buildtool/execution_api/local/local_api.cpp @@ -217,9 +217,17 @@ auto LocalApi::Upload(std::unordered_set<ArtifactBlob>&& blobs, blobs.begin(), blobs.end(), [&cas = local_context_.storage->CAS()](ArtifactBlob const& blob) { + bool const is_tree = blob.GetDigest().IsTree(); + std::optional<ArtifactDigest> cas_digest; - if (auto const content = blob.ReadContent()) { - cas_digest = blob.GetDigest().IsTree() + if (auto const path = blob.GetFilePath()) { + static constexpr bool kOwner = true; + cas_digest = + is_tree ? cas.StoreTree<kOwner>(*path) + : cas.StoreBlob<kOwner>(*path, blob.IsExecutable()); + } + else if (auto const content = blob.ReadContent()) { + cas_digest = is_tree ? cas.StoreTree(*content) : cas.StoreBlob(*content, blob.IsExecutable()); } |