summaryrefslogtreecommitdiff
path: root/src/buildtool/execution_api/local/local_response.hpp
diff options
context:
space:
mode:
authorPaul Cristian Sarbu <paul.cristian.sarbu@huawei.com>2023-06-14 16:53:33 +0200
committerPaul Cristian Sarbu <paul.cristian.sarbu@huawei.com>2023-06-26 17:57:29 +0200
commit59677e140ed064813660641d8e841e0fcc4af0ea (patch)
treea20db484c091e7bda753dad63c4e44270fa1de0d /src/buildtool/execution_api/local/local_response.hpp
parent5e3cc5a7a38e93159a81b940b19ced879a2d280c (diff)
downloadjustbuild-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.hpp29
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 {