diff options
author | Oliver Reiche <oliver.reiche@huawei.com> | 2023-02-21 16:33:05 +0100 |
---|---|---|
committer | Oliver Reiche <oliver.reiche@huawei.com> | 2023-02-22 11:52:39 +0100 |
commit | 2f4a589f869a3667f60499a71eb24c6add533193 (patch) | |
tree | 17902b7cd9bbe40fb8acccfeeb20a76c6b829053 /src/buildtool/execution_api/local/local_api.hpp | |
parent | 1d954d5a1f06e65b8422b32d53d69db9fed2d60b (diff) | |
download | justbuild-2f4a589f869a3667f60499a71eb24c6add533193.tar.gz |
ExecutionApi: Retrieve to correct CAS directly
... by keeping track of each blob being a file or executable
and storing it to the correct local physical CAS directory.
The new flag is merely a hint and only used by the local
execution API. Leaving it out will still correctly transfer
the blob but may cause unnecessary duplicates in file CAS.
Diffstat (limited to 'src/buildtool/execution_api/local/local_api.hpp')
-rw-r--r-- | src/buildtool/execution_api/local/local_api.hpp | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/src/buildtool/execution_api/local/local_api.hpp b/src/buildtool/execution_api/local/local_api.hpp index 02fa4fa6..1528ff23 100644 --- a/src/buildtool/execution_api/local/local_api.hpp +++ b/src/buildtool/execution_api/local/local_api.hpp @@ -194,7 +194,8 @@ class LocalApi final : public IExecutionApi { // Collect blob. try { - container.Emplace(BazelBlob{digest, *content}); + container.Emplace( + BazelBlob{digest, *content, IsExecutableObject(info.type)}); } catch (std::exception const& ex) { Logger::Log( LogLevel::Error, "failed to emplace blob: ", ex.what()); @@ -211,8 +212,9 @@ class LocalApi final : public IExecutionApi { -> bool final { for (auto const& blob : blobs) { auto const is_tree = NativeSupport::IsTree(blob.digest.hash()); - auto cas_digest = is_tree ? storage_->StoreTree(blob.data) - : storage_->StoreBlob(blob.data); + auto cas_digest = + is_tree ? storage_->StoreTree(blob.data) + : storage_->StoreBlob(blob.data, blob.is_exec); if (not cas_digest or not std::equal_to<bazel_re::Digest>{}( *cas_digest, blob.digest)) { return false; |