mirror of
https://github.com/nushell/nushell.git
synced 2025-06-20 09:58:15 +02:00
Fix cp bug (#5642)
This commit is contained in:
parent
41853b9f18
commit
ee8a0c9477
@ -81,7 +81,6 @@ impl Command for Cp {
|
|||||||
let source = current_dir_path.join(src.item.as_str());
|
let source = current_dir_path.join(src.item.as_str());
|
||||||
let destination = current_dir_path.join(dst.item.as_str());
|
let destination = current_dir_path.join(dst.item.as_str());
|
||||||
|
|
||||||
// check if destination is a dir and it exists
|
|
||||||
let path_last_char = destination.as_os_str().to_string_lossy().chars().last();
|
let path_last_char = destination.as_os_str().to_string_lossy().chars().last();
|
||||||
let is_directory = path_last_char == Some('/') || path_last_char == Some('\\');
|
let is_directory = path_last_char == Some('/') || path_last_char == Some('\\');
|
||||||
if is_directory && !destination.exists() {
|
if is_directory && !destination.exists() {
|
||||||
@ -159,7 +158,22 @@ impl Command for Cp {
|
|||||||
|
|
||||||
for (src, dst) in sources {
|
for (src, dst) in sources {
|
||||||
if src.is_file() {
|
if src.is_file() {
|
||||||
let res = if interactive && dst.exists() {
|
let dst =
|
||||||
|
canonicalize_with(dst.as_path(), ¤t_dir_path).unwrap_or(dst);
|
||||||
|
let res = if src == dst {
|
||||||
|
let message = format!(
|
||||||
|
"src {:?} and dst {:?} are identical(not copied)",
|
||||||
|
source, destination
|
||||||
|
);
|
||||||
|
|
||||||
|
return Err(ShellError::GenericError(
|
||||||
|
"Copy aborted".into(),
|
||||||
|
message,
|
||||||
|
Some(span),
|
||||||
|
None,
|
||||||
|
Vec::new(),
|
||||||
|
));
|
||||||
|
} else if interactive && dst.exists() {
|
||||||
interactive_copy(interactive, src, dst, span, copy_file)
|
interactive_copy(interactive, src, dst, span, copy_file)
|
||||||
} else {
|
} else {
|
||||||
copy_file(src, dst, span)
|
copy_file(src, dst, span)
|
||||||
@ -240,7 +254,6 @@ impl Command for Cp {
|
|||||||
)
|
)
|
||||||
})?;
|
})?;
|
||||||
}
|
}
|
||||||
|
|
||||||
if s.is_symlink() && not_follow_symlink {
|
if s.is_symlink() && not_follow_symlink {
|
||||||
let res = if interactive && d.exists() {
|
let res = if interactive && d.exists() {
|
||||||
interactive_copy(interactive, s, d, span, copy_symlink)
|
interactive_copy(interactive, s, d, span, copy_symlink)
|
||||||
|
@ -318,3 +318,16 @@ fn copy_dir_symlink_file_body_not_changed() {
|
|||||||
assert!(actual.contains("hello_data"));
|
assert!(actual.contains("hello_data"));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn copy_identical_file() {
|
||||||
|
Playground::setup("cp_test_15", |_dirs, sandbox| {
|
||||||
|
sandbox.with_files(vec![EmptyFile("same.txt")]);
|
||||||
|
|
||||||
|
let actual = nu!(
|
||||||
|
cwd: sandbox.cwd(),
|
||||||
|
"cp same.txt same.txt",
|
||||||
|
);
|
||||||
|
assert!(actual.err.contains("Copy aborted"));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user