Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/uu/mv/locales/en-US.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ mv-error-extra-operand = mv: extra operand {$operand}
mv-error-backup-might-destroy-source = backing up {$target} might destroy source; {$source} not moved
mv-error-will-not-overwrite-just-created = will not overwrite just-created '{$target}' with '{$source}'
mv-error-not-replacing = not replacing {$target}
mv-error-cannot-overwrite = cannot overwrite {$target}
mv-error-cannot-move = cannot move {$source} to {$target}
mv-error-directory-not-empty = Directory not empty
mv-error-dangling-symlink = can't determine symlink type, since it is dangling
Expand Down
1 change: 1 addition & 0 deletions src/uu/mv/locales/fr-FR.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ mv-error-extra-operand = mv : opérande supplémentaire {$operand}
mv-error-backup-might-destroy-source = sauvegarder {$target} pourrait détruire la source ; {$source} non déplacé
mv-error-will-not-overwrite-just-created = ne va pas écraser le fichier qui vient d'être créé '{$target}' avec '{$source}'
mv-error-not-replacing = ne remplace pas {$target}
mv-error-cannot-overwrite = impossible d'écraser ${target}
mv-error-cannot-move = impossible de déplacer {$source} vers {$target}
mv-error-directory-not-empty = Répertoire non vide
mv-error-dangling-symlink = impossible de déterminer le type de lien symbolique, car il est suspendu
Expand Down
6 changes: 3 additions & 3 deletions src/uu/mv/src/mv.rs
Original file line number Diff line number Diff line change
Expand Up @@ -675,9 +675,9 @@ fn move_files_into_dir(files: &[PathBuf], target_dir: &Path, options: &Options)
) {
Err(e) if e.to_string().is_empty() => set_exit_code(1),
Err(e) => {
let e = e.map_err_context(|| {
translate!("mv-error-cannot-move", "source" => sourcepath.quote(), "target" => targetpath.quote())
});
let e = e.map_err_context(
|| translate!("mv-error-cannot-overwrite", "target" => targetpath.quote()),
);
match display_manager {
Some(ref pb) => pb.suspend(|| show!(e)),
None => show!(e),
Expand Down
40 changes: 40 additions & 0 deletions tests/by-util/test_mv.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1427,6 +1427,46 @@ fn test_mv_overwrite_nonempty_dir() {
assert!(at.dir_exists(dir_b));
}

#[test]
fn test_mv_overwrite_nonempty_dir_error() {
let (at, mut ucmd) = at_and_ucmd!();
let dir_a = "test_mv_overwrite_nonempty_dir_error_a";
let dir_b = "test_mv_overwrite_nonempty_dir_error_b";
let shared_dir = "dir";
let dummy_dir_a = &format!("{dir_a}/{shared_dir}");

let dummy_dir_b = {
// for Windows OS which uses back slash for paths on
// err msg
#[cfg(not(unix))]
{
&format!("{dir_b}\\{shared_dir}")
}
// for Unix OS which uses forward slash for paths on
// err msg
#[cfg(unix)]
{
&format!("{dir_b}/{shared_dir}")
}
};
let dummy_file = &format!("{dir_b}/{shared_dir}/file");

at.mkdir(dir_a);
at.mkdir(dummy_dir_a);
at.mkdir(dir_b);
at.mkdir(dummy_dir_b);
at.touch(dummy_file);

// Not same error as GNU; the error message is a rust builtin as mentioned in
// https://github.com/uutils/coreutils/issues/5102
// Current: "mv: cannot overwrite: A non-empty directory: 'b' exists at destination"
// GNU: "mv: cannot overwrite 'b': Directory not empty"

ucmd.arg(dummy_dir_a).arg(dir_b).fails().stderr_is(format!(
"mv: cannot overwrite '{dummy_dir_b}': Directory not empty\n"
));
}

#[test]
fn test_mv_backup_dir() {
let (at, mut ucmd) = at_and_ucmd!();
Expand Down
Loading