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,
|
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.
|
/// Enum representing various debug states of the offload and reflink actions.
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
#[allow(dead_code)] // All of them are used on Linux
|
#[allow(dead_code)] // All of them are used on Linux
|
||||||
|
@ -1974,7 +1981,7 @@ fn handle_copy_mode(
|
||||||
source_in_command_line: bool,
|
source_in_command_line: bool,
|
||||||
source_is_fifo: bool,
|
source_is_fifo: bool,
|
||||||
#[cfg(unix)] source_is_stream: bool,
|
#[cfg(unix)] source_is_stream: bool,
|
||||||
) -> CopyResult<()> {
|
) -> CopyResult<PerformedAction> {
|
||||||
let source_is_symlink = source_metadata.is_symlink();
|
let source_is_symlink = source_metadata.is_symlink();
|
||||||
|
|
||||||
match options.copy_mode {
|
match options.copy_mode {
|
||||||
|
@ -2043,7 +2050,7 @@ fn handle_copy_mode(
|
||||||
println!("skipped {}", dest.quote());
|
println!("skipped {}", dest.quote());
|
||||||
}
|
}
|
||||||
|
|
||||||
return Ok(());
|
return Ok(PerformedAction::Skipped);
|
||||||
}
|
}
|
||||||
update_control::UpdateMode::ReplaceNoneFail => {
|
update_control::UpdateMode::ReplaceNoneFail => {
|
||||||
return Err(Error::Error(format!("not replacing '{}'", dest.display())));
|
return Err(Error::Error(format!("not replacing '{}'", dest.display())));
|
||||||
|
@ -2054,7 +2061,7 @@ fn handle_copy_mode(
|
||||||
let src_time = source_metadata.modified()?;
|
let src_time = source_metadata.modified()?;
|
||||||
let dest_time = dest_metadata.modified()?;
|
let dest_time = dest_metadata.modified()?;
|
||||||
if src_time <= dest_time {
|
if src_time <= dest_time {
|
||||||
return Ok(());
|
return Ok(PerformedAction::Skipped);
|
||||||
} else {
|
} else {
|
||||||
options.overwrite.verify(dest, options.debug)?;
|
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.
|
/// Calculates the permissions for the destination file in a copy operation.
|
||||||
|
@ -2322,7 +2329,7 @@ fn copy_file(
|
||||||
#[cfg(not(unix))]
|
#[cfg(not(unix))]
|
||||||
let source_is_stream = false;
|
let source_is_stream = false;
|
||||||
|
|
||||||
handle_copy_mode(
|
let performed_action = handle_copy_mode(
|
||||||
source,
|
source,
|
||||||
dest,
|
dest,
|
||||||
options,
|
options,
|
||||||
|
@ -2335,7 +2342,7 @@ fn copy_file(
|
||||||
source_is_stream,
|
source_is_stream,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
if options.verbose {
|
if options.verbose && performed_action != PerformedAction::Skipped {
|
||||||
print_verbose_output(options.parents, progress_bar, source, dest);
|
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");
|
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]
|
#[test]
|
||||||
fn test_cp_arg_update_older_dest_older_than_src() {
|
fn test_cp_arg_update_older_dest_older_than_src() {
|
||||||
let (at, mut ucmd) = at_and_ucmd!();
|
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");
|
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]
|
#[test]
|
||||||
fn test_cp_arg_update_short_no_overwrite() {
|
fn test_cp_arg_update_short_no_overwrite() {
|
||||||
// same as --update=older
|
// same as --update=older
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue