diff options
author | Paul Cristian Sarbu <paul.cristian.sarbu@huawei.com> | 2023-06-14 16:53:33 +0200 |
---|---|---|
committer | Paul Cristian Sarbu <paul.cristian.sarbu@huawei.com> | 2023-06-26 17:57:29 +0200 |
commit | 59677e140ed064813660641d8e841e0fcc4af0ea (patch) | |
tree | a20db484c091e7bda753dad63c4e44270fa1de0d /src/buildtool/execution_api/local/local_response.hpp | |
parent | 5e3cc5a7a38e93159a81b940b19ced879a2d280c (diff) | |
download | justbuild-59677e140ed064813660641d8e841e0fcc4af0ea.tar.gz |
Allow non-upwards symlinks with local API
Diffstat (limited to 'src/buildtool/execution_api/local/local_response.hpp')
-rw-r--r-- | src/buildtool/execution_api/local/local_response.hpp | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/src/buildtool/execution_api/local/local_response.hpp b/src/buildtool/execution_api/local/local_response.hpp index 135897d8..8e6cb04f 100644 --- a/src/buildtool/execution_api/local/local_response.hpp +++ b/src/buildtool/execution_api/local/local_response.hpp @@ -105,8 +105,7 @@ class LocalResponse final : public IExecutionResponse { action_result.output_file_symlinks_size()) + static_cast<std::size_t>( action_result.output_directory_symlinks_size()) + - static_cast<std::size_t>( - action_result.output_directories().size())); + static_cast<std::size_t>(action_result.output_directories_size())); DirSymlinks dir_symlinks{}; dir_symlinks_.reserve(static_cast<std::size_t>( @@ -153,6 +152,32 @@ class LocalResponse final : public IExecutionResponse { } } + // collect all symlinks and store them + for (auto const& link : action_result.output_file_symlinks()) { + try { + artifacts.emplace( + link.path(), + Artifact::ObjectInfo{ + .digest = ArtifactDigest::Create<ObjectType::File>( + link.target()), + .type = ObjectType::Symlink}); + } catch (...) { + return false; + } + } + for (auto const& link : action_result.output_directory_symlinks()) { + try { + artifacts.emplace( + link.path(), + Artifact::ObjectInfo{ + .digest = ArtifactDigest::Create<ObjectType::File>( + link.target()), + .type = ObjectType::Symlink}); + } catch (...) { + return false; + } + } + // collect directories and store them for (auto const& dir : action_result.output_directories()) { try { |