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/bazel_msg/bazel_blob.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/bazel_msg/bazel_blob.hpp')
-rw-r--r-- | src/buildtool/execution_api/bazel_msg/bazel_blob.hpp | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/src/buildtool/execution_api/bazel_msg/bazel_blob.hpp b/src/buildtool/execution_api/bazel_msg/bazel_blob.hpp index 5e92a393..15845c08 100644 --- a/src/buildtool/execution_api/bazel_msg/bazel_blob.hpp +++ b/src/buildtool/execution_api/bazel_msg/bazel_blob.hpp @@ -25,22 +25,30 @@ #include "src/buildtool/file_system/file_system_manager.hpp" struct BazelBlob { - BazelBlob(bazel_re::Digest mydigest, std::string mydata) - : digest{std::move(mydigest)}, data{std::move(mydata)} {} + BazelBlob(bazel_re::Digest mydigest, std::string mydata, bool is_exec) + : digest{std::move(mydigest)}, + data{std::move(mydata)}, + is_exec{is_exec} {} bazel_re::Digest digest{}; std::string data{}; + bool is_exec{}; // optional: hint to put the blob in executable CAS }; [[nodiscard]] static inline auto CreateBlobFromFile( std::filesystem::path const& file_path) noexcept -> std::optional<BazelBlob> { - auto const content = FileSystemManager::ReadFile(file_path); + auto const type = FileSystemManager::Type(file_path); + if (not type) { + return std::nullopt; + } + auto const content = FileSystemManager::ReadFile(file_path, *type); if (not content.has_value()) { return std::nullopt; } return BazelBlob{ArtifactDigest::Create<ObjectType::File>(*content), - *content}; + *content, + IsExecutableObject(*type)}; } #endif // INCLUDED_SRC_BUILDTOOL_EXECUTION_API_BAZEL_MSG_BAZEL_BLOB_HPP |