summaryrefslogtreecommitdiff
path: root/src/buildtool/execution_api/local/local_action.cpp
diff options
context:
space:
mode:
authorOliver Reiche <oliver.reiche@huawei.com>2022-10-06 12:18:25 +0200
committerOliver Reiche <oliver.reiche@huawei.com>2022-10-07 13:30:06 +0200
commit51f8b186803292f111011d04d5291deb374dc34c (patch)
tree818606bb46be19cc56618f1d56eb5e3f309f4fae /src/buildtool/execution_api/local/local_action.cpp
parent64b8da270611ebb997c3801f09bd06878aee026a (diff)
downloadjustbuild-51f8b186803292f111011d04d5291deb374dc34c.tar.gz
LocalTreeMap: Prevent tree objects from being stored
... to align with the original idea of caching a flat list of blob objects, without the need to recursively traverse any trees. Consequently, we cannot create any map entry in places where we do not have all sub-tree entries at hand (e.g., LocalAPI, BazelAPI, BazelResponse).
Diffstat (limited to 'src/buildtool/execution_api/local/local_action.cpp')
-rw-r--r--src/buildtool/execution_api/local/local_action.cpp40
1 files changed, 5 insertions, 35 deletions
diff --git a/src/buildtool/execution_api/local/local_action.cpp b/src/buildtool/execution_api/local/local_action.cpp
index 0c15e788..af0f2476 100644
--- a/src/buildtool/execution_api/local/local_action.cpp
+++ b/src/buildtool/execution_api/local/local_action.cpp
@@ -248,20 +248,9 @@ auto LocalAction::CollectOutputDir(std::filesystem::path const& exec_path,
[this](auto path, auto is_exec) {
return storage_->StoreBlob</*kOwner=*/true>(path, is_exec);
},
- [this](auto bytes, auto dir) -> std::optional<bazel_re::Digest> {
- auto digest = storage_->StoreBlob(bytes);
- if (digest and not tree_map_->HasTree(*digest)) {
- auto tree = tree_map_->CreateTree();
- if (not BazelMsgFactory::ReadObjectInfosFromDirectory(
- dir,
- [&tree](auto path, auto info) {
- return tree.AddInfo(path, info);
- }) or
- not tree_map_->AddTree(*digest, std::move(tree))) {
- return std::nullopt;
- }
- }
- return digest;
+ [this](auto bytes,
+ auto /*dir*/) -> std::optional<bazel_re::Digest> {
+ return storage_->StoreBlob(bytes);
});
}
else {
@@ -271,27 +260,8 @@ auto LocalAction::CollectOutputDir(std::filesystem::path const& exec_path,
return storage_->StoreBlob</*kOwner=*/true>(path, is_exec);
},
[this](auto bytes,
- auto entries) -> std::optional<bazel_re::Digest> {
- auto digest = storage_->StoreTree(bytes);
- if (digest and not tree_map_->HasTree(*digest)) {
- auto tree = tree_map_->CreateTree();
- for (auto const& [raw_id, es] : entries) {
- auto id = ToHexString(raw_id);
- for (auto const& entry : es) {
- auto info = Artifact::ObjectInfo{
- ArtifactDigest{
- id, 0, entry.type == ObjectType::Tree},
- entry.type};
- if (not tree.AddInfo(entry.name, info)) {
- return std::nullopt;
- }
- }
- }
- if (not tree_map_->AddTree(*digest, std::move(tree))) {
- return std::nullopt;
- }
- }
- return digest;
+ auto /*entries*/) -> std::optional<bazel_re::Digest> {
+ return storage_->StoreTree(bytes);
});
}
if (digest) {