aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Voss <mail@thomasvoss.com> 2023-08-12 12:04:57 +0200
committerThomas Voss <mail@thomasvoss.com> 2023-08-12 12:04:57 +0200
commitcb51941a08c72cb371be3939c40d7257dd6098bf (patch)
tree69e80e565a60eb704b2861f2c84df97a99cc4ed8
parentb557886301de0eefd3296941fe29fe539b364d8f (diff)
Make -v 500x better
-rw-r--r--src/main.rs45
1 files changed, 34 insertions, 11 deletions
diff --git a/src/main.rs b/src/main.rs
index ae29006..379a14d 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -115,6 +115,10 @@ fn work() -> Result<(), io::Error> {
let mut uniq_dsts: HashSet<PathBuf> = HashSet::with_capacity(dsts.len());
let dir = tempdir()?;
+ if flags.verbose {
+ eprintln!("created directory ‘{}’", dir.path().display());
+ }
+
let ps = srcs
.iter()
.zip(dsts)
@@ -154,15 +158,19 @@ fn work() -> Result<(), io::Error> {
cache_dir = [Path::new(cache_base.as_str()), Path::new("mmv"), Path::new(pid.as_str())].iter().collect::<PathBuf>();
fs::create_dir_all(&cache_dir)?;
+ if flags.verbose {
+ eprintln!("created directory ‘{}’", cache_dir.display());
+ }
+
let cwd = require!(env::current_dir());
require!(env::set_current_dir(&cache_dir));
- backup_srcs(ps.iter().map(|(s, _, _)| s))?;
+ backup_srcs(&flags, &cache_dir, ps.iter().map(|(s, _, _)| s))?;
require!(env::set_current_dir(cwd));
}
if flags.dryrun {
for (s, _, d) in ps {
- println!("{} -> {}", disp(&s), disp(&d));
+ println!("renamed ‘{}’ -> ‘{}’", disp(&s), disp(&d));
}
} else {
for (s, t, _) in ps.iter() {
@@ -174,25 +182,40 @@ fn work() -> Result<(), io::Error> {
}
if flags.backup {
- fs::remove_dir_all(cache_dir)?;
+ fs::remove_dir_all(&cache_dir)?;
+ if flags.verbose {
+ eprintln!("removing directory ‘{}’", disp(&cache_dir));
+ }
}
Ok(())
}
-fn backup_srcs<'a, I>(xs: I) -> Result<(), io::Error>
+fn backup_srcs<'a, I>(flags: &Flags, cwd: &PathBuf, xs: I) -> Result<(), io::Error>
where
I: Iterator<Item = &'a PathBuf>
{
for x in xs {
let data = require!(fs::metadata(x));
if data.is_dir() {
- fs::create_dir_all(require!(x.strip_prefix("/")))?;
+ let rel_x = require!(x.strip_prefix("/"));
+ fs::create_dir_all(rel_x)?;
+ if flags.verbose {
+ eprintln!("created directory ‘{}/{}’", disp(cwd), rel_x.display());
+ }
} else {
if let Some(p) = x.parent() {
- fs::create_dir_all(require!(p.strip_prefix("/")))?;
+ let rel_x = require!(p.strip_prefix("/"));
+ fs::create_dir_all(rel_x)?;
+ if flags.verbose {
+ eprintln!("created directory ‘{}/{}’", disp(cwd), rel_x.display());
+ }
+ }
+ let rel_x = require!(x.strip_prefix("/"));
+ fs::copy(x, rel_x)?;
+ if flags.verbose {
+ eprintln!("copied ‘{}’ -> ‘{}/{}’", disp(x), disp(cwd), rel_x.display());
}
- fs::copy(x, require!(x.strip_prefix("/")))?;
}
}
@@ -406,15 +429,15 @@ fn normalize_path(path: &Path) -> PathBuf {
}
fn move_path(flags: &Flags, from: &PathBuf, to: &PathBuf) {
- if flags.verbose {
- println!("{} -> {}", disp(&from), disp(&to));
- }
-
if !flags.dryrun {
copy_and_remove_file_or_dir(&from, &to).unwrap_or_else(|(f, e)| {
err!("{}: {e}", f.to_string_lossy());
});
}
+
+ if flags.verbose {
+ eprintln!("renamed ‘{}’ -> ‘{}’", disp(&from), disp(&to));
+ }
}
fn copy_and_remove_file_or_dir<'a>(