diff options
author | Brad King <brad.king@kitware.com> | 2022-11-15 00:32:07 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2022-11-15 14:28:45 (GMT) |
commit | 89b144789d969e4af06de515df2595b9a043431f (patch) | |
tree | 14a9e904ec39d1fc2602341df27c8044bc090b82 | |
parent | 91dd7898ee6f6e38e55430bbb55fd5db851671e9 (diff) | |
download | CMake-89b144789d969e4af06de515df2595b9a043431f.zip CMake-89b144789d969e4af06de515df2595b9a043431f.tar.gz CMake-89b144789d969e4af06de515df2595b9a043431f.tar.bz2 |
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.
-rw-r--r-- | Source/cmSystemTools.cxx | 18 | ||||
-rw-r--r-- | Tests/RunCMake/file/COPY_FILE-input-missing-result.txt | 1 | ||||
-rw-r--r-- | Tests/RunCMake/file/COPY_FILE-input-missing-stderr.txt | 14 | ||||
-rw-r--r-- | Tests/RunCMake/file/COPY_FILE-input-missing.cmake | 3 | ||||
-rw-r--r-- | Tests/RunCMake/file/COPY_FILE-output-missing-result.txt | 1 | ||||
-rw-r--r-- | Tests/RunCMake/file/COPY_FILE-output-missing-stderr.txt | 14 | ||||
-rw-r--r-- | Tests/RunCMake/file/COPY_FILE-output-missing.cmake | 4 | ||||
-rw-r--r-- | Tests/RunCMake/file/RunCMakeTest.cmake | 2 |
8 files changed, 53 insertions, 4 deletions
diff --git a/Source/cmSystemTools.cxx b/Source/cmSystemTools.cxx index ee74908..78d230e 100644 --- a/Source/cmSystemTools.cxx +++ b/Source/cmSystemTools.cxx @@ -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; } diff --git a/Tests/RunCMake/file/COPY_FILE-input-missing-result.txt b/Tests/RunCMake/file/COPY_FILE-input-missing-result.txt new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/Tests/RunCMake/file/COPY_FILE-input-missing-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/file/COPY_FILE-input-missing-stderr.txt b/Tests/RunCMake/file/COPY_FILE-input-missing-stderr.txt new file mode 100644 index 0000000..989925d --- /dev/null +++ b/Tests/RunCMake/file/COPY_FILE-input-missing-stderr.txt @@ -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\)$ diff --git a/Tests/RunCMake/file/COPY_FILE-input-missing.cmake b/Tests/RunCMake/file/COPY_FILE-input-missing.cmake new file mode 100644 index 0000000..2d2c55e --- /dev/null +++ b/Tests/RunCMake/file/COPY_FILE-input-missing.cmake @@ -0,0 +1,3 @@ +set(oldname "${CMAKE_CURRENT_BINARY_DIR}/input-missing") +set(newname "${CMAKE_CURRENT_BINARY_DIR}/output") +file(COPY_FILE "${oldname}" "${newname}") diff --git a/Tests/RunCMake/file/COPY_FILE-output-missing-result.txt b/Tests/RunCMake/file/COPY_FILE-output-missing-result.txt new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/Tests/RunCMake/file/COPY_FILE-output-missing-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/file/COPY_FILE-output-missing-stderr.txt b/Tests/RunCMake/file/COPY_FILE-output-missing-stderr.txt new file mode 100644 index 0000000..0e7d9f7 --- /dev/null +++ b/Tests/RunCMake/file/COPY_FILE-output-missing-stderr.txt @@ -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\)$ diff --git a/Tests/RunCMake/file/COPY_FILE-output-missing.cmake b/Tests/RunCMake/file/COPY_FILE-output-missing.cmake new file mode 100644 index 0000000..22133e7 --- /dev/null +++ b/Tests/RunCMake/file/COPY_FILE-output-missing.cmake @@ -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}") diff --git a/Tests/RunCMake/file/RunCMakeTest.cmake b/Tests/RunCMake/file/RunCMakeTest.cmake index db88956..4ad00ff 100644 --- a/Tests/RunCMake/file/RunCMakeTest.cmake +++ b/Tests/RunCMake/file/RunCMakeTest.cmake @@ -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) |