summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorOliver Reiche <oliver.reiche@huawei.com>2023-12-12 11:09:36 +0100
committerOliver Reiche <oliver.reiche@huawei.com>2023-12-13 15:23:11 +0100
commit599dddc182b702192252753c76429d3da44aa463 (patch)
treeefe6512905b3c75026d80fb9f7ff2a4e3558e9f5 /src
parent94de8e505ca7812e5ae572cdbf75243a7bdc99bf (diff)
downloadjustbuild-599dddc182b702192252753c76429d3da44aa463.tar.gz
Filesystem: Fix copy overwrite of symlink with file
... and improve log messages in case of failure. (cherry picked from commit 65d35006de65e540355833a56bcaa7659f6f1afd)
Diffstat (limited to 'src')
-rw-r--r--src/buildtool/execution_api/git/git_api.hpp3
-rw-r--r--src/buildtool/execution_api/local/local_api.hpp3
-rw-r--r--src/buildtool/execution_api/remote/bazel/bazel_api.cpp3
-rw-r--r--src/buildtool/file_system/file_system_manager.hpp5
4 files changed, 11 insertions, 3 deletions
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)) {