summaryrefslogtreecommitdiff
path: root/src/buildtool/execution_api/local/local_api.hpp
diff options
context:
space:
mode:
authorOliver Reiche <oliver.reiche@huawei.com>2023-02-21 16:33:05 +0100
committerOliver Reiche <oliver.reiche@huawei.com>2023-02-22 11:52:39 +0100
commit2f4a589f869a3667f60499a71eb24c6add533193 (patch)
tree17902b7cd9bbe40fb8acccfeeb20a76c6b829053 /src/buildtool/execution_api/local/local_api.hpp
parent1d954d5a1f06e65b8422b32d53d69db9fed2d60b (diff)
downloadjustbuild-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.hpp8
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;