|
@@ -55,7 +55,7 @@ fn execute_clean(path: PathBuf) -> anyResult<()> {
|
|
|
Ok(())
|
|
|
}
|
|
|
|
|
|
-fn clean_in_dir(path: PathBuf, verbose: bool) -> anyResult<u64> {
|
|
|
+fn clean_in_dir(path: PathBuf, verbose: bool, forced: bool) -> anyResult<u64> {
|
|
|
let mut cleaned: u64 = 0;
|
|
|
for entry in fs::read_dir(path)? {
|
|
|
let entry = entry?;
|
|
@@ -63,22 +63,25 @@ fn clean_in_dir(path: PathBuf, verbose: bool) -> anyResult<u64> {
|
|
|
if p.is_dir() {
|
|
|
let needed = find_target_dir(p.clone())?;
|
|
|
if needed {
|
|
|
- let newest = find_newest_file(p.clone())?;
|
|
|
- let meta = fs::metadata(newest)?;
|
|
|
- let modif = meta.modified()?;
|
|
|
- let access = meta.accessed()?;
|
|
|
- let el: u64;
|
|
|
- if modif.ge(&access) {
|
|
|
- el = modif.elapsed()?.as_secs();
|
|
|
- } else {
|
|
|
- el = access.elapsed()?.as_secs();
|
|
|
- }
|
|
|
- let days = el / 86400;
|
|
|
- if days < 30 {
|
|
|
- if verbose {
|
|
|
- println!(" => {} (dirty, {} days)", p.display(), days);
|
|
|
+ if !forced {
|
|
|
+ // If forced no need to check
|
|
|
+ let newest = find_newest_file(p.clone())?;
|
|
|
+ let meta = fs::metadata(newest)?;
|
|
|
+ let modif = meta.modified()?;
|
|
|
+ let access = meta.accessed()?;
|
|
|
+ let el: u64;
|
|
|
+ if modif.ge(&access) {
|
|
|
+ el = modif.elapsed()?.as_secs();
|
|
|
+ } else {
|
|
|
+ el = access.elapsed()?.as_secs();
|
|
|
+ }
|
|
|
+ let days = el / 86400;
|
|
|
+ if days < 30 {
|
|
|
+ if verbose {
|
|
|
+ println!(" => {} (dirty, {} days)", p.display(), days);
|
|
|
+ }
|
|
|
+ continue;
|
|
|
}
|
|
|
- continue;
|
|
|
}
|
|
|
if !verbose {
|
|
|
println!(" => {}", p.display());
|
|
@@ -89,7 +92,7 @@ fn clean_in_dir(path: PathBuf, verbose: bool) -> anyResult<u64> {
|
|
|
cleaned += 1;
|
|
|
} else {
|
|
|
// Maybe nested?
|
|
|
- let r = clean_in_dir(p, verbose)?;
|
|
|
+ let r = clean_in_dir(p, verbose, forced)?;
|
|
|
cleaned += r;
|
|
|
}
|
|
|
}
|
|
@@ -99,14 +102,21 @@ fn clean_in_dir(path: PathBuf, verbose: bool) -> anyResult<u64> {
|
|
|
|
|
|
fn main() -> anyResult<()> {
|
|
|
let mut verbose: bool = false;
|
|
|
+ let mut forced: bool = false;
|
|
|
for a in env::args() {
|
|
|
if a == "v" || a == "V" || a.to_lowercase() == "verbose" {
|
|
|
- verbose = true
|
|
|
+ verbose = true;
|
|
|
+ println!("Verbose");
|
|
|
+ } else if a == "f" || a == "F" || a.to_lowercase().starts_with("force") {
|
|
|
+ forced = true;
|
|
|
+ if verbose {
|
|
|
+ println!("Forced");
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
println!("Sweeping...");
|
|
|
let cwd = env::current_dir()?;
|
|
|
- let cleaned = clean_in_dir(cwd, verbose)?;
|
|
|
+ let cleaned = clean_in_dir(cwd, verbose, forced)?;
|
|
|
if cleaned == 1 {
|
|
|
println!("Cleaned 1 crate");
|
|
|
} else {
|