diff options
-rw-r--r-- | CHANGELOG.md | 2 | ||||
-rw-r--r-- | src/buildtool/execution_api/git/git_api.hpp | 3 | ||||
-rw-r--r-- | src/buildtool/execution_api/local/local_api.hpp | 3 | ||||
-rw-r--r-- | src/buildtool/execution_api/remote/bazel/bazel_api.cpp | 3 | ||||
-rw-r--r-- | src/buildtool/file_system/file_system_manager.hpp | 5 |
5 files changed, 13 insertions, 3 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index fa3654bf..5ecee63c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,8 @@ Bug fixes on top of release `1.2.3`. resulting stage is well-formed, i.e., without tree conflicts. - Local execution and `just execute` now correctly create empty directories if they are part of the action's input. +- Fixed overwrite of existing symlinks in the output directory + when using subcommands `install` and `install-cas`. ## Release `1.2.3` (2023-11-15) diff --git a/src/buildtool/execution_api/git/git_api.hpp b/src/buildtool/execution_api/git/git_api.hpp index 5b552220..e3d24743 100644 --- a/src/buildtool/execution_api/git/git_api.hpp +++ b/src/buildtool/execution_api/git/git_api.hpp @@ -80,6 +80,9 @@ class GitApi final : public IExecutionApi { not FileSystemManager::WriteFileAs</*kSetEpochTime=*/true, /*kSetWritable=*/true>( *blob, output_paths[i], info.type)) { + Logger::Log(LogLevel::Error, + "staging to output path {} failed.", + output_paths[i].string()); return false; } } diff --git a/src/buildtool/execution_api/local/local_api.hpp b/src/buildtool/execution_api/local/local_api.hpp index e0de1598..76808661 100644 --- a/src/buildtool/execution_api/local/local_api.hpp +++ b/src/buildtool/execution_api/local/local_api.hpp @@ -107,6 +107,9 @@ class LocalApi final : public IExecutionApi { /*kSetEpochTime=*/true, /*kSetWritable=*/true>( *blob_path, output_paths[i], info.type)) { + Logger::Log(LogLevel::Error, + "staging to output path {} failed.", + output_paths[i].string()); return false; } } diff --git a/src/buildtool/execution_api/remote/bazel/bazel_api.cpp b/src/buildtool/execution_api/remote/bazel/bazel_api.cpp index e2da0188..7b35564a 100644 --- a/src/buildtool/execution_api/remote/bazel/bazel_api.cpp +++ b/src/buildtool/execution_api/remote/bazel/bazel_api.cpp @@ -124,6 +124,9 @@ auto BazelApi::CreateAction( if (not FileSystemManager::WriteFileAs</*kSetEpochTime=*/true, /*kSetWritable=*/true>( blobs[pos].data, output_paths[gpos], type)) { + Logger::Log(LogLevel::Error, + "staging to output path {} failed.", + output_paths[gpos].string()); return false; } } diff --git a/src/buildtool/file_system/file_system_manager.hpp b/src/buildtool/file_system/file_system_manager.hpp index d905f301..fa0fcfb3 100644 --- a/src/buildtool/file_system/file_system_manager.hpp +++ b/src/buildtool/file_system/file_system_manager.hpp @@ -1013,9 +1013,8 @@ class FileSystemManager { std::filesystem::copy_options::overwrite_existing) noexcept -> bool { try { - // src and dst should be actual files - if (std::filesystem::is_symlink(src) or - std::filesystem::is_symlink(dst)) { + // src should be an actual file + if (std::filesystem::is_symlink(src)) { return false; } if (not RemoveFile(dst)) { |