Browse Source

Added a forced option

Steve Thielemann 1 month ago
parent
commit
3c7ccd2d5b
4 changed files with 34 additions and 22 deletions
  1. 3 1
      CHANGELOG
  2. 1 1
      Cargo.lock
  3. 1 1
      Cargo.toml
  4. 29 19
      src/main.rs

+ 3 - 1
CHANGELOG

@@ -1,4 +1,6 @@
-v0.1.3 => Latest
+v0.1.4 => Latest
+    Added a forced command line argument (clap is needed)
+v0.1.3
     Introduced a last modified and/or last accessed requirement, this should
     only clean a crate not modified or accessed 30 days ago 
 v0.1.2

+ 1 - 1
Cargo.lock

@@ -10,7 +10,7 @@ checksum = "6b964d184e89d9b6b67dd2715bc8e74cf3107fb2b529990c90cf517326150bf4"
 
 [[package]]
 name = "rustpan"
-version = "0.1.3"
+version = "0.1.4"
 dependencies = [
  "anyhow",
 ]

+ 1 - 1
Cargo.toml

@@ -1,6 +1,6 @@
 [package]
 name = "rustpan"
-version = "0.1.3"
+version = "0.1.4"
 edition = "2021"
 
 [dependencies]

+ 29 - 19
src/main.rs

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