diff options
author | Klaus Aehlig <klaus.aehlig@huawei.com> | 2025-01-21 16:34:39 +0100 |
---|---|---|
committer | Klaus Aehlig <klaus.aehlig@huawei.com> | 2025-01-22 11:05:55 +0100 |
commit | 9c6b3d38781471250699f0b8f76e20945d4ee8fb (patch) | |
tree | 2e20eaef2caa880adba153e9d7ee207aeb6e74e4 /src/buildtool/execution_api/local/local_api.hpp | |
parent | f62c9a57d1f3536cb877d2bf8cb87d8a91a1a960 (diff) | |
download | justbuild-9c6b3d38781471250699f0b8f76e20945d4ee8fb.tar.gz |
local api: take git fallback seriously
... and, when asked if an artifact is available, also inspect the
git cas.
Diffstat (limited to 'src/buildtool/execution_api/local/local_api.hpp')
-rw-r--r-- | src/buildtool/execution_api/local/local_api.hpp | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/src/buildtool/execution_api/local/local_api.hpp b/src/buildtool/execution_api/local/local_api.hpp index 7e7bee1c..f554c573 100644 --- a/src/buildtool/execution_api/local/local_api.hpp +++ b/src/buildtool/execution_api/local/local_api.hpp @@ -293,21 +293,29 @@ class LocalApi final : public IExecutionApi { [[nodiscard]] auto IsAvailable(ArtifactDigest const& digest) const noexcept -> bool final { - return static_cast<bool>( + auto found = static_cast<bool>( digest.IsTree() ? local_context_.storage->CAS().TreePath(digest) : local_context_.storage->CAS().BlobPath(digest, false)); + if ((not found) and git_api_) { + if (git_api_->IsAvailable(digest)) { + auto plain_local = LocalApi(&local_context_); + auto obj_info = std::vector<Artifact::ObjectInfo>{}; + obj_info.push_back(Artifact::ObjectInfo{ + digest, + digest.IsTree() ? ObjectType::Tree : ObjectType::File, + false}); + found = git_api_->RetrieveToCas(obj_info, plain_local); + } + } + return found; } [[nodiscard]] auto IsAvailable(std::vector<ArtifactDigest> const& digests) const noexcept -> std::vector<ArtifactDigest> final { std::vector<ArtifactDigest> result; for (auto const& digest : digests) { - auto const path = - digest.IsTree() - ? local_context_.storage->CAS().TreePath(digest) - : local_context_.storage->CAS().BlobPath(digest, false); - if (not path) { + if (not IsAvailable(digest)) { result.push_back(digest); } } |