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:
parent
e6ff094e54
commit
3896aa31be
2 changed files with 5 additions and 9 deletions
|
@ -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);
|
||||||
|
|
|
@ -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"])
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue