stdout is now buffered; removed requirement for two or more targets; format_pair no longer has trailing newline; output bug fixed
This commit is contained in:
parent
aa74724295
commit
249edf748b
2 changed files with 13 additions and 14 deletions
Binary file not shown.
27
src/main.rs
27
src/main.rs
|
@ -82,6 +82,7 @@ fn process_args() -> (Vec<Vec<PathBuf>>, Config) {
|
|||
let args = CLIArguments::from_args();
|
||||
|
||||
let run_targets: Vec<Vec<String>> = split_vec(&args.targets, ";");
|
||||
run_targets.retain(|targets| targets.len() > 0);
|
||||
|
||||
if args.prompt {
|
||||
if !prompt_confirm(&run_targets) {
|
||||
|
@ -91,9 +92,8 @@ fn process_args() -> (Vec<Vec<PathBuf>>, Config) {
|
|||
|
||||
let run_paths: Vec<Vec<PathBuf>> = run_targets.iter().enumerate().map(
|
||||
|(i,spaths)| {
|
||||
if spaths.len() < 2 {
|
||||
eprintln!("Not enough targets for run {} (args: {})", i+1, shlex::join(spaths.iter().map(|string| string.as_str())));
|
||||
std::process::exit(1);
|
||||
if spaths.len() == 0 {
|
||||
return
|
||||
}
|
||||
spaths.iter().map(
|
||||
|spath| Path::new(spath).canonicalize().unwrap_or_else(
|
||||
|
@ -151,9 +151,10 @@ fn run(paths: Vec<PathBuf>, cfg: &Config) -> Result<(), Box<dyn std::error::Erro
|
|||
registry.retain(|_, files| files.len() >= 2);
|
||||
|
||||
let stdout = std::io::stdout();
|
||||
let mut stdout_handle = stdout.lock();
|
||||
let mut stdout_buffer = std::io::BufWriter::new(stdout.lock());
|
||||
|
||||
if cfg.verbosity > 0 {
|
||||
stdout_handle.write_all(format!("considering {} total files for duplicates\n", registry.iter().map(|(_,files)| files.len()).sum::<usize>()).as_bytes()).unwrap();
|
||||
writeln!(stdout_buffer, "considering {} total files for duplicates", registry.iter().map(|(_,files)| files.len()).sum::<usize>()).unwrap();
|
||||
}
|
||||
|
||||
for (fsize, mut files) in registry {
|
||||
|
@ -161,7 +162,7 @@ fn run(paths: Vec<PathBuf>, cfg: &Config) -> Result<(), Box<dyn std::error::Erro
|
|||
files.sort_by_key(|path| path.file_name().unwrap_or_default().to_string_lossy().to_string());
|
||||
}
|
||||
if cfg.verbosity > 1 {
|
||||
stdout_handle.write_all(format!("considering {} files of size {} for duplicates\n", files.len(), fsize).as_bytes()).unwrap();
|
||||
writeln!(stdout_buffer, "considering {} files of size {} for duplicates\n", files.len(), fsize).unwrap();
|
||||
}
|
||||
for i in (0..files.len()).rev() {
|
||||
let f1 = &files[i];
|
||||
|
@ -175,8 +176,7 @@ fn run(paths: Vec<PathBuf>, cfg: &Config) -> Result<(), Box<dyn std::error::Erro
|
|||
}
|
||||
}
|
||||
if cfg.verbosity >= 0 {
|
||||
stdout_handle.write_all(b"hardlinked ").unwrap();
|
||||
stdout_handle.write_all(format_pair(f1, f2, cfg).as_bytes()).unwrap();
|
||||
writeln!(stdout_buffer, "hardlinked {}", format_pair(f1, f2, cfg)).unwrap();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -199,13 +199,12 @@ fn hardlink(f1: &PathBuf, f2: &PathBuf) -> Result<(), &'static str> {
|
|||
}
|
||||
}
|
||||
|
||||
/// adds newline at the end
|
||||
fn format_pair(f1: &PathBuf, f2: &PathBuf, cfg: &Config) -> String {
|
||||
let f1s = f1.to_string_lossy();
|
||||
let f2s = f2.to_string_lossy();
|
||||
if cfg.no_brace_output {
|
||||
return format!(
|
||||
"{} {}\n",
|
||||
"{} {}",
|
||||
shlex::quote(&f1s),
|
||||
shlex::quote(&f2s)
|
||||
)
|
||||
|
@ -217,7 +216,7 @@ fn format_pair(f1: &PathBuf, f2: &PathBuf, cfg: &Config) -> String {
|
|||
let suffixlong = suffix.len() > 2;
|
||||
if prefixlong && suffixlong {
|
||||
format!(
|
||||
"{}{{{},{}}}{}\n",
|
||||
"{}{{{},{}}}{}",
|
||||
shlex::quote(prefix),
|
||||
shlex::quote(&f1s[ prefix.len()..std::cmp::max(prefix.len(), f1s.len()-suffix.len()) ]),
|
||||
shlex::quote(&f2s[ prefix.len()..std::cmp::max(prefix.len(), f2s.len()-suffix.len()) ]),
|
||||
|
@ -225,21 +224,21 @@ fn format_pair(f1: &PathBuf, f2: &PathBuf, cfg: &Config) -> String {
|
|||
)
|
||||
} else if prefixlong {
|
||||
format!(
|
||||
"{}{{{},{}}}\n",
|
||||
"{}{{{},{}}}",
|
||||
shlex::quote(prefix),
|
||||
shlex::quote(&f1s[prefix.len()..]),
|
||||
shlex::quote(&f2s[prefix.len()..])
|
||||
)
|
||||
} else if suffixlong {
|
||||
format!(
|
||||
"{{{},{}}}{}\n",
|
||||
"{{{},{}}}{}",
|
||||
shlex::quote(&f1s[..f1s.len()-suffix.len()]),
|
||||
shlex::quote(&f2s[..f2s.len()-suffix.len()]),
|
||||
shlex::quote(suffix),
|
||||
)
|
||||
} else {
|
||||
format!(
|
||||
"{} {}\n",
|
||||
"{} {}",
|
||||
shlex::quote(&f1s),
|
||||
shlex::quote(&f2s)
|
||||
)
|
||||
|
|
Loading…
Add table
Reference in a new issue