mirror of
https://github.com/RGBCube/uutils-coreutils
synced 2025-07-28 11:37:44 +00:00
cp: disabled verbose output if file has been skipped
This commit is contained in:
parent
b3f7aca846
commit
63fe4fb327
2 changed files with 62 additions and 6 deletions
|
@ -287,6 +287,13 @@ pub struct Options {
|
|||
pub progress_bar: bool,
|
||||
}
|
||||
|
||||
/// Enum representing if a file has been skipped.
|
||||
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
|
||||
enum PerformedAction {
|
||||
Copied,
|
||||
Skipped,
|
||||
}
|
||||
|
||||
/// Enum representing various debug states of the offload and reflink actions.
|
||||
#[derive(Debug)]
|
||||
#[allow(dead_code)] // All of them are used on Linux
|
||||
|
@ -1974,7 +1981,7 @@ fn handle_copy_mode(
|
|||
source_in_command_line: bool,
|
||||
source_is_fifo: bool,
|
||||
#[cfg(unix)] source_is_stream: bool,
|
||||
) -> CopyResult<()> {
|
||||
) -> CopyResult<PerformedAction> {
|
||||
let source_is_symlink = source_metadata.is_symlink();
|
||||
|
||||
match options.copy_mode {
|
||||
|
@ -2043,7 +2050,7 @@ fn handle_copy_mode(
|
|||
println!("skipped {}", dest.quote());
|
||||
}
|
||||
|
||||
return Ok(());
|
||||
return Ok(PerformedAction::Skipped);
|
||||
}
|
||||
update_control::UpdateMode::ReplaceNoneFail => {
|
||||
return Err(Error::Error(format!("not replacing '{}'", dest.display())));
|
||||
|
@ -2054,7 +2061,7 @@ fn handle_copy_mode(
|
|||
let src_time = source_metadata.modified()?;
|
||||
let dest_time = dest_metadata.modified()?;
|
||||
if src_time <= dest_time {
|
||||
return Ok(());
|
||||
return Ok(PerformedAction::Skipped);
|
||||
} else {
|
||||
options.overwrite.verify(dest, options.debug)?;
|
||||
|
||||
|
@ -2096,7 +2103,7 @@ fn handle_copy_mode(
|
|||
}
|
||||
};
|
||||
|
||||
Ok(())
|
||||
Ok(PerformedAction::Copied)
|
||||
}
|
||||
|
||||
/// Calculates the permissions for the destination file in a copy operation.
|
||||
|
@ -2322,7 +2329,7 @@ fn copy_file(
|
|||
#[cfg(not(unix))]
|
||||
let source_is_stream = false;
|
||||
|
||||
handle_copy_mode(
|
||||
let performed_action = handle_copy_mode(
|
||||
source,
|
||||
dest,
|
||||
options,
|
||||
|
@ -2335,7 +2342,7 @@ fn copy_file(
|
|||
source_is_stream,
|
||||
)?;
|
||||
|
||||
if options.verbose {
|
||||
if options.verbose && performed_action != PerformedAction::Skipped {
|
||||
print_verbose_output(options.parents, progress_bar, source, dest);
|
||||
}
|
||||
|
||||
|
|
|
@ -439,6 +439,29 @@ fn test_cp_arg_update_older_dest_not_older_than_src() {
|
|||
assert_eq!(at.read(new), "new content\n");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_cp_arg_update_older_dest_not_older_than_src_no_verbose_output() {
|
||||
let (at, mut ucmd) = at_and_ucmd!();
|
||||
|
||||
let old = "test_cp_arg_update_dest_not_older_file1";
|
||||
let new = "test_cp_arg_update_dest_not_older_file2";
|
||||
let old_content = "old content\n";
|
||||
let new_content = "new content\n";
|
||||
|
||||
at.write(old, old_content);
|
||||
at.write(new, new_content);
|
||||
|
||||
ucmd.arg(old)
|
||||
.arg(new)
|
||||
.arg("--verbose")
|
||||
.arg("--update=older")
|
||||
.succeeds()
|
||||
.no_stderr()
|
||||
.no_stdout();
|
||||
|
||||
assert_eq!(at.read(new), "new content\n");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_cp_arg_update_older_dest_older_than_src() {
|
||||
let (at, mut ucmd) = at_and_ucmd!();
|
||||
|
@ -464,6 +487,32 @@ fn test_cp_arg_update_older_dest_older_than_src() {
|
|||
assert_eq!(at.read(old), "new content\n");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_cp_arg_update_older_dest_older_than_src_with_verbose_output() {
|
||||
let (at, mut ucmd) = at_and_ucmd!();
|
||||
|
||||
let old = "test_cp_arg_update_dest_older_file1";
|
||||
let new = "test_cp_arg_update_dest_older_file2";
|
||||
let old_content = "old content\n";
|
||||
let new_content = "new content\n";
|
||||
|
||||
let mut f = at.make_file(old);
|
||||
f.write_all(old_content.as_bytes()).unwrap();
|
||||
f.set_modified(std::time::UNIX_EPOCH).unwrap();
|
||||
|
||||
at.write(new, new_content);
|
||||
|
||||
ucmd.arg(new)
|
||||
.arg(old)
|
||||
.arg("--verbose")
|
||||
.arg("--update=older")
|
||||
.succeeds()
|
||||
.no_stderr()
|
||||
.stdout_is(format!("'{new}' -> '{old}'\n"));
|
||||
|
||||
assert_eq!(at.read(old), "new content\n");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_cp_arg_update_short_no_overwrite() {
|
||||
// same as --update=older
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue