summaryrefslogtreecommitdiff
path: root/src/buildtool/execution_api/local/local_api.hpp
diff options
context:
space:
mode:
authorKlaus Aehlig <klaus.aehlig@huawei.com>2025-01-21 16:34:39 +0100
committerKlaus Aehlig <klaus.aehlig@huawei.com>2025-01-22 11:05:55 +0100
commit9c6b3d38781471250699f0b8f76e20945d4ee8fb (patch)
tree2e20eaef2caa880adba153e9d7ee207aeb6e74e4 /src/buildtool/execution_api/local/local_api.hpp
parentf62c9a57d1f3536cb877d2bf8cb87d8a91a1a960 (diff)
downloadjustbuild-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.hpp20
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);
}
}