summaryrefslogtreecommitdiff
path: root/src/buildtool/execution_api/local
diff options
context:
space:
mode:
authorKlaus Aehlig <klaus.aehlig@huawei.com>2023-07-27 13:59:11 +0200
committerKlaus Aehlig <klaus.aehlig@huawei.com>2023-07-27 16:51:17 +0200
commit26090ce503f40502a62d7ebabcb4ee060b28d05b (patch)
treea15036404215cf63c0b5202e15f1000e2b71f64a /src/buildtool/execution_api/local
parent106ad30405914d20c05a32b32157f17da57c570e (diff)
downloadjustbuild-26090ce503f40502a62d7ebabcb4ee060b28d05b.tar.gz
Execution API: support fetching a single artifact to memory
Diffstat (limited to 'src/buildtool/execution_api/local')
-rw-r--r--src/buildtool/execution_api/local/TARGETS1
-rw-r--r--src/buildtool/execution_api/local/local_api.hpp22
2 files changed, 23 insertions, 0 deletions
diff --git a/src/buildtool/execution_api/local/TARGETS b/src/buildtool/execution_api/local/TARGETS
index b9e056b8..1ea94d69 100644
--- a/src/buildtool/execution_api/local/TARGETS
+++ b/src/buildtool/execution_api/local/TARGETS
@@ -43,6 +43,7 @@
, "config"
, ["src/buildtool/common", "common"]
, ["src/buildtool/common", "bazel_types"]
+ , ["src/buildtool/file_system", "file_system_manager"]
]
}
}
diff --git a/src/buildtool/execution_api/local/local_api.hpp b/src/buildtool/execution_api/local/local_api.hpp
index d699ad4f..e0de1598 100644
--- a/src/buildtool/execution_api/local/local_api.hpp
+++ b/src/buildtool/execution_api/local/local_api.hpp
@@ -31,6 +31,7 @@
#include "src/buildtool/execution_api/common/execution_api.hpp"
#include "src/buildtool/execution_api/git/git_api.hpp"
#include "src/buildtool/execution_api/local/local_action.hpp"
+#include "src/buildtool/file_system/file_system_manager.hpp"
#include "src/buildtool/logging/logger.hpp"
#include "src/buildtool/storage/storage.hpp"
@@ -237,6 +238,27 @@ class LocalApi final : public IExecutionApi {
return api->Upload(container, /*skip_find_missing=*/true);
}
+ [[nodiscard]] auto RetrieveToMemory(
+ Artifact::ObjectInfo const& artifact_info)
+ -> std::optional<std::string> override {
+ std::optional<std::filesystem::path> location{};
+ if (IsTreeObject(artifact_info.type)) {
+ location = storage_->CAS().TreePath(artifact_info.digest);
+ }
+ else {
+ location = storage_->CAS().BlobPath(
+ artifact_info.digest, IsExecutableObject(artifact_info.type));
+ }
+ if (not location) {
+ return std::nullopt;
+ }
+ auto const content = FileSystemManager::ReadFile(*location);
+ if (not content) {
+ return std::nullopt;
+ }
+ return *content;
+ }
+
[[nodiscard]] auto Upload(BlobContainer const& blobs,
bool /*skip_find_missing*/) noexcept
-> bool final {