Browse Source

v0.1.5 Clap CLI

Steve Thielemann 1 month ago
parent
commit
85bbf7507e
4 changed files with 261 additions and 20 deletions
  1. 3 1
      CHANGELOG
  2. 236 1
      Cargo.lock
  3. 2 1
      Cargo.toml
  4. 20 17
      src/main.rs

+ 3 - 1
CHANGELOG

@@ -1,4 +1,6 @@
-v0.1.4 => Latest
+v0.1.5 => Latest
+    Added clap CLI
+v0.1.4
     Added a forced command line argument (clap is needed)
 v0.1.3
     Introduced a last modified and/or last accessed requirement, this should

+ 236 - 1
Cargo.lock

@@ -2,15 +2,250 @@
 # It is not intended for manual editing.
 version = 4
 
+[[package]]
+name = "anstream"
+version = "0.6.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b"
+dependencies = [
+ "anstyle",
+ "anstyle-parse",
+ "anstyle-query",
+ "anstyle-wincon",
+ "colorchoice",
+ "is_terminal_polyfill",
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle"
+version = "1.0.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9"
+
+[[package]]
+name = "anstyle-parse"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9"
+dependencies = [
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle-query"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c"
+dependencies = [
+ "windows-sys",
+]
+
+[[package]]
+name = "anstyle-wincon"
+version = "3.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e"
+dependencies = [
+ "anstyle",
+ "once_cell",
+ "windows-sys",
+]
+
 [[package]]
 name = "anyhow"
 version = "1.0.96"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "6b964d184e89d9b6b67dd2715bc8e74cf3107fb2b529990c90cf517326150bf4"
 
+[[package]]
+name = "clap"
+version = "4.5.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "027bb0d98429ae334a8698531da7077bdf906419543a35a55c2cb1b66437d767"
+dependencies = [
+ "clap_builder",
+ "clap_derive",
+]
+
+[[package]]
+name = "clap_builder"
+version = "4.5.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5589e0cba072e0f3d23791efac0fd8627b49c829c196a492e88168e6a669d863"
+dependencies = [
+ "anstream",
+ "anstyle",
+ "clap_lex",
+ "strsim",
+]
+
+[[package]]
+name = "clap_derive"
+version = "4.5.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf4ced95c6f4a675af3da73304b9ac4ed991640c36374e4b46795c49e17cf1ed"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6"
+
+[[package]]
+name = "colorchoice"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990"
+
+[[package]]
+name = "heck"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
+
+[[package]]
+name = "is_terminal_polyfill"
+version = "1.70.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf"
+
+[[package]]
+name = "once_cell"
+version = "1.20.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "945462a4b81e43c4e3ba96bd7b49d834c6f61198356aa858733bc4acf3cbe62e"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.93"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc"
+dependencies = [
+ "proc-macro2",
+]
+
 [[package]]
 name = "rustpan"
-version = "0.1.4"
+version = "0.1.5"
 dependencies = [
  "anyhow",
+ "clap",
+]
+
+[[package]]
+name = "strsim"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
+
+[[package]]
+name = "syn"
+version = "2.0.98"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "36147f1a48ae0ec2b5b3bc5b537d267457555a10dc06f3dbc8cb11ba3006d3b1"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00e2473a93778eb0bad35909dff6a10d28e63f792f16ed15e404fca9d5eeedbe"
+
+[[package]]
+name = "utf8parse"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
+
+[[package]]
+name = "windows-sys"
+version = "0.59.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
+dependencies = [
+ "windows-targets",
 ]
+
+[[package]]
+name = "windows-targets"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
+dependencies = [
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_gnullvm",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
+
+[[package]]
+name = "windows_i686_gnullvm"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"

+ 2 - 1
Cargo.toml

@@ -1,7 +1,8 @@
 [package]
 name = "rustpan"
-version = "0.1.4"
+version = "0.1.5"
 edition = "2021"
 
 [dependencies]
 anyhow = "1.0.96"
+clap = { version = "4.5.31", features = ["derive"] }

+ 20 - 17
src/main.rs

@@ -1,5 +1,20 @@
 use std::{env, fs, path::PathBuf, process, time::SystemTime};
 use anyhow::Result as anyResult;
+use clap::Parser;
+
+#[derive(Parser)]
+#[command(version = "0.1.5", about = "It's not a dust pan, it's a rust pan. (A cargo cleaner)", long_about = None)]
+struct Args {
+    #[arg(short='v', long="verbose")]
+    /// Print directory even if it's not being cleaned
+    verbose: bool,
+    #[arg(short='d', long="days", default_value_t=30)]
+    /// Days since last modified and/or last accessed
+    days: u32,
+    #[arg(short='f', long="force")]
+    /// Clean the directory, ignoring days since last modified and/or last accessed
+    force: bool,
+}
 
 fn find_target_dir(path: PathBuf) -> anyResult<bool> {
     let mut found_target_dir: bool = false;
@@ -55,7 +70,7 @@ fn execute_clean(path: PathBuf) -> anyResult<()> {
     Ok(())
 }
 
-fn clean_in_dir(path: PathBuf, verbose: bool, forced: bool) -> anyResult<u64> {
+fn clean_in_dir(path: PathBuf, verbose: bool, forced: bool, days: u64) -> anyResult<u64> {
     let mut cleaned: u64 = 0;
     for entry in fs::read_dir(path)? {
         let entry = entry?;
@@ -76,7 +91,7 @@ fn clean_in_dir(path: PathBuf, verbose: bool, forced: bool) -> anyResult<u64> {
                         el = access.elapsed()?.as_secs();
                     }
                     let days = el / 86400;
-                    if days < 30 {
+                    if days < days {
                         if verbose {
                             println!(" => {} (dirty, {} days)", p.display(), days);
                         }
@@ -92,7 +107,7 @@ fn clean_in_dir(path: PathBuf, verbose: bool, forced: bool) -> anyResult<u64> {
                 cleaned += 1;
             } else {
                 // Maybe nested?
-                let r = clean_in_dir(p, verbose, forced)?;
+                let r = clean_in_dir(p, verbose, forced, days)?;
                 cleaned += r;
             }
         }
@@ -101,22 +116,10 @@ fn clean_in_dir(path: PathBuf, verbose: bool, forced: 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;
-            println!("Verbose");
-        } else if a == "f" || a == "F" || a.to_lowercase().starts_with("force") {
-            forced = true;
-            if verbose {
-                println!("Forced");
-            }
-        }
-    }
+    let cli = Args::parse();
     println!("Sweeping...");
     let cwd = env::current_dir()?;
-    let cleaned = clean_in_dir(cwd, verbose, forced)?;
+    let cleaned = clean_in_dir(cwd, cli.verbose, cli.force, cli.days as u64)?;
     if cleaned == 1 {
         println!("Cleaned 1 crate");
     } else {