file(COPY_FILE): Report if failure occurred on input or output path

When we know whether a failure was associated with the input or the
output path, include this information in the error message.
This commit is contained in:
Brad King
2022-11-14 19:32:07 -05:00
parent 91dd7898ee
commit 89b144789d
8 changed files with 53 additions and 4 deletions

View File

@@ -1140,7 +1140,7 @@ cmSystemTools::CopyResult cmSystemTools::CopySingleFile(
return CopyResult::Success;
}
cmsys::Status status;
cmsys::SystemTools::CopyStatus status;
status = cmsys::SystemTools::CloneFileContent(oldname, newname);
if (!status) {
// if cloning did not succeed, fall back to blockwise copy
@@ -1149,14 +1149,24 @@ cmSystemTools::CopyResult cmSystemTools::CopySingleFile(
if (!status) {
if (err) {
*err = status.GetString();
switch (status.Path) {
case cmsys::SystemTools::CopyStatus::SourcePath:
*err = cmStrCat(*err, " (input)");
break;
case cmsys::SystemTools::CopyStatus::DestPath:
*err = cmStrCat(*err, " (output)");
break;
default:
break;
}
}
return CopyResult::Failure;
}
if (perms) {
status = SystemTools::SetPermissions(newname, perm);
if (!status) {
perms = SystemTools::SetPermissions(newname, perm);
if (!perms) {
if (err) {
*err = status.GetString();
*err = cmStrCat(perms.GetString(), " (output)");
}
return CopyResult::Failure;
}

View File

@@ -0,0 +1 @@
1

View File

@@ -0,0 +1,14 @@
^CMake Error at [^
]*/Tests/RunCMake/file/COPY_FILE-input-missing.cmake:[0-9]+ \(file\):
file COPY_FILE failed to copy
[^
]*/Tests/RunCMake/file/COPY_FILE-input-missing-build/input-missing
to
[^
]*/Tests/RunCMake/file/COPY_FILE-input-missing-build/output
because: [^
]+ \(input\)$

View File

@@ -0,0 +1,3 @@
set(oldname "${CMAKE_CURRENT_BINARY_DIR}/input-missing")
set(newname "${CMAKE_CURRENT_BINARY_DIR}/output")
file(COPY_FILE "${oldname}" "${newname}")

View File

@@ -0,0 +1 @@
1

View File

@@ -0,0 +1,14 @@
^CMake Error at [^
]*/Tests/RunCMake/file/COPY_FILE-output-missing.cmake:[0-9]+ \(file\):
file COPY_FILE failed to copy
[^
]*/Tests/RunCMake/file/COPY_FILE-output-missing-build/input
to
[^
]*/Tests/RunCMake/file/COPY_FILE-output-missing-build/output-missing/output
because: [^
]+ \(output\)$

View File

@@ -0,0 +1,4 @@
set(oldname "${CMAKE_CURRENT_BINARY_DIR}/input")
set(newname "${CMAKE_CURRENT_BINARY_DIR}/output-missing/output")
file(WRITE "${oldname}" "")
file(COPY_FILE "${oldname}" "${newname}")

View File

@@ -65,6 +65,8 @@ run_cmake_script(COPY_FILE-file-ONLY_IF_DIFFERENT-no-overwrite)
run_cmake_script(COPY_FILE-link-to-file)
run_cmake_script(COPY_FILE-arg-missing)
run_cmake_script(COPY_FILE-arg-unknown)
run_cmake_script(COPY_FILE-input-missing)
run_cmake_script(COPY_FILE-output-missing)
run_cmake_script(RENAME-file-replace)
run_cmake_script(RENAME-file-to-file)