mirror of
https://github.com/RGBCube/uutils-coreutils
synced 2025-07-28 11:37:44 +00:00
cp: Create backup before hardlink
This commit is contained in:
parent
87e582b5e0
commit
45751e9e48
2 changed files with 23 additions and 0 deletions
|
@ -1309,6 +1309,15 @@ fn copy_file(
|
||||||
|
|
||||||
match options.copy_mode {
|
match options.copy_mode {
|
||||||
CopyMode::Link => {
|
CopyMode::Link => {
|
||||||
|
if dest.exists() {
|
||||||
|
let backup_path =
|
||||||
|
backup_control::get_backup_path(options.backup, &dest, &options.backup_suffix);
|
||||||
|
if let Some(backup_path) = backup_path {
|
||||||
|
backup_dest(&dest, &backup_path)?;
|
||||||
|
fs::remove_file(&dest)?;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fs::hard_link(&source, &dest).context(context)?;
|
fs::hard_link(&source, &dest).context(context)?;
|
||||||
}
|
}
|
||||||
CopyMode::Copy => {
|
CopyMode::Copy => {
|
||||||
|
|
|
@ -1444,3 +1444,17 @@ fn test_cp_archive_on_nonexistent_file() {
|
||||||
"cp: cannot stat 'nonexistent_file.txt': No such file or directory (os error 2)",
|
"cp: cannot stat 'nonexistent_file.txt': No such file or directory (os error 2)",
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_cp_link_backup() {
|
||||||
|
let (at, mut ucmd) = at_and_ucmd!();
|
||||||
|
at.touch("file2");
|
||||||
|
ucmd.arg("-l")
|
||||||
|
.arg("-b")
|
||||||
|
.arg(TEST_HELLO_WORLD_SOURCE)
|
||||||
|
.arg("file2")
|
||||||
|
.succeeds();
|
||||||
|
|
||||||
|
assert!(at.file_exists("file2~"));
|
||||||
|
assert_eq!(at.read("file2"), "Hello, World!\n");
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue