1
Fork 0
mirror of https://github.com/RGBCube/uutils-coreutils synced 2025-07-28 11:37:44 +00:00

cp: fix cp --force --backup f f fails on macOS

This commit is contained in:
Miles Liu 2022-11-20 18:12:43 +08:00
parent e6ff094e54
commit 3896aa31be
No known key found for this signature in database
GPG key ID: 4DB9B32F9B24A7A9
2 changed files with 5 additions and 9 deletions

View file

@ -52,7 +52,10 @@ pub(crate) fn copy_on_write(
flags: u32, flags: u32,
) -> libc::c_int = std::mem::transmute(raw_pfn); ) -> libc::c_int = std::mem::transmute(raw_pfn);
error = pfn(src.as_ptr(), dst.as_ptr(), 0); error = pfn(src.as_ptr(), dst.as_ptr(), 0);
if std::io::Error::last_os_error().kind() == std::io::ErrorKind::AlreadyExists { if std::io::Error::last_os_error().kind() == std::io::ErrorKind::AlreadyExists
// Only remove the `dest` if the `source` and `dest` are not the same
&& source != dest
{
// clonefile(2) fails if the destination exists. Remove it and try again. Do not // clonefile(2) fails if the destination exists. Remove it and try again. Do not
// bother to check if removal worked because we're going to try to clone again. // bother to check if removal worked because we're going to try to clone again.
let _ = fs::remove_file(dest); let _ = fs::remove_file(dest);

View file

@ -2290,16 +2290,9 @@ fn test_same_file_force() {
} }
/// Test that copying file to itself with forced backup succeeds. /// Test that copying file to itself with forced backup succeeds.
#[cfg(all(not(windows), not(target_os = "macos")))] #[cfg(all(not(windows)))]
#[test] #[test]
fn test_same_file_force_backup() { fn test_same_file_force_backup() {
// TODO This test should work on macos, but the command was
// causing an error:
//
// cp: 'f' -> 'f': No such file or directory (os error 2)
//
// I couldn't figure out how to fix it, so I just skipped this
// test on macos.
let (at, mut ucmd) = at_and_ucmd!(); let (at, mut ucmd) = at_and_ucmd!();
at.touch("f"); at.touch("f");
ucmd.args(&["--force", "--backup", "f", "f"]) ucmd.args(&["--force", "--backup", "f", "f"])