summaryrefslogtreecommitdiff
path: root/src/buildtool/execution_api/local
diff options
context:
space:
mode:
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 {