|  | @@ -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 {
 |