From 1e0a79241e0d50fc58c29b449710b225dd8343c6 Mon Sep 17 00:00:00 2001 From: Huakun Shen Date: Mon, 6 May 2024 04:24:11 -0400 Subject: [PATCH 1/3] Merge cli and scanner crate --- cli/Cargo.toml | 18 ------ cli/src/bin/pb.rs | 14 ----- scanner/Cargo.toml | 5 +- scanner/src/bin/parallel.rs | 72 ------------------------ scanner/src/bin/parallel_mut.rs | 46 --------------- cli/src/lib.rs => scanner/src/cleaner.rs | 8 ++- scanner/src/lib.rs | 1 + {cli => scanner}/src/main.rs | 9 ++- 8 files changed, 14 insertions(+), 159 deletions(-) delete mode 100644 cli/Cargo.toml delete mode 100644 cli/src/bin/pb.rs delete mode 100644 scanner/src/bin/parallel.rs delete mode 100644 scanner/src/bin/parallel_mut.rs rename cli/src/lib.rs => scanner/src/cleaner.rs (92%) rename {cli => scanner}/src/main.rs (97%) diff --git a/cli/Cargo.toml b/cli/Cargo.toml deleted file mode 100644 index 6966c5b..0000000 --- a/cli/Cargo.toml +++ /dev/null @@ -1,18 +0,0 @@ -[package] -name = "devclean" -version = "0.1.0" -edition = "2021" -default-run = "devclean" -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] -clap = { version = "4.5.4", features = ["derive", "cargo"] } -color-eyre = "0.6.3" -dialoguer = "0.11.0" -fs_extra = "1.3.0" -human_bytes = "0.4.3" -humantime = "2.1.0" -indicatif = "0.17.8" -prettytable = "0.10.0" -rayon = "1.10.0" -scanner = { path = "../scanner" } diff --git a/cli/src/bin/pb.rs b/cli/src/bin/pb.rs deleted file mode 100644 index 45c15e2..0000000 --- a/cli/src/bin/pb.rs +++ /dev/null @@ -1,14 +0,0 @@ -use indicatif::{ProgressBar, ProgressStyle}; - -fn main() { - let pb = ProgressBar::new(1); - let spinner_style = ProgressStyle::with_template("{spinner} {wide_msg}").unwrap(); - pb.set_style(spinner_style); - for i in 0..100 { - pb.set_message(format!("{i}:")); - // pb.inc(1); - std::thread::sleep(std::time::Duration::from_millis(50)); - } - - pb.finish_with_message("Scan Finished..."); -} diff --git a/scanner/Cargo.toml b/scanner/Cargo.toml index e53a809..54e12d1 100644 --- a/scanner/Cargo.toml +++ b/scanner/Cargo.toml @@ -1,15 +1,18 @@ [package] -name = "scanner" +name = "devclean" version = "0.1.0" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] +clap = { version = "4.5.4", features = ["derive", "cargo"] } color-eyre = "0.6.3" +dialoguer = "0.11.0" fs_extra = "1.3.0" git2 = "0.18.3" human_bytes = "0.4.3" +humantime = "2.1.0" indicatif = "0.17.8" prettytable-rs = "0.10.0" rayon = "1.10.0" diff --git a/scanner/src/bin/parallel.rs b/scanner/src/bin/parallel.rs deleted file mode 100644 index f1e4eeb..0000000 --- a/scanner/src/bin/parallel.rs +++ /dev/null @@ -1,72 +0,0 @@ -use fs_extra::dir::get_size; -use rayon::prelude::*; -use std::fs; -use std::path::{Path, PathBuf}; -use std::time::Duration; - -struct Scanner { - count: u64, - callbacks: Vec Vec + Send + Sync>>, -} - -impl Scanner { - fn scan_parallel(&self, path: PathBuf) -> Vec { - // self.count += 1; - // println!("Scanning: {:?}", path); - // std::thread::sleep(Duration::from_millis(10)); - get_size(path.clone()).unwrap(); - // let path_clone = path.clone(); - let entries = fs::read_dir(path) - .unwrap() - .filter_map(Result::ok) - .collect::>(); - - // We use `flat_map` here to concatenate all the results into a single vector - entries - .par_iter() - .flat_map(|entry| { - // get_size(path_clone).unwrap(); - let path = entry.path(); - if path.is_dir() { - // Recursively scan the directory in parallel - self.scan(path) - } else { - vec![path] - } - }) - .collect() - } - - fn scan(&self, path: PathBuf) -> Vec { - // std::thread::sleep(Duration::from_millis(10)); - get_size(path.clone()).unwrap(); - let mut results = vec![]; - let entries: Vec<_> = path.read_dir().unwrap().collect(); - for entry in entries { - let entry = entry.unwrap(); - let path = entry.path(); - if path.is_dir() { - results.extend(self.scan(path)); - } else { - results.push(path); - } - } - - results - } -} - -fn main() { - // let path = PathBuf::from("/Users/hacker/Dev/projects/"); - let path = PathBuf::from("/Users/hacker/Dev/learn"); - let start = std::time::Instant::now(); - let mut scanner = Scanner { - callbacks: vec![], - count: 0, - }; - let results = scanner.scan_parallel(path); - // let results = scanner.scan(path); - println!("Scan Finished in {:?}", start.elapsed()); - println!("Found {} files", results.len()); - // Optionally, print results -} diff --git a/scanner/src/bin/parallel_mut.rs b/scanner/src/bin/parallel_mut.rs deleted file mode 100644 index befd343..0000000 --- a/scanner/src/bin/parallel_mut.rs +++ /dev/null @@ -1,46 +0,0 @@ -use fs_extra::dir::get_size; -use rayon::prelude::*; -use std::fs; -use std::sync::atomic::{AtomicU64, Ordering}; -use std::sync::Arc; -use std::path::PathBuf; -use std::time::Duration; - -struct Scanner { - count: Arc, -} - -impl Scanner { - fn scan_parallel(&self, path: PathBuf) -> Vec { - self.count.fetch_add(1, Ordering::SeqCst); - get_size(path.clone()).unwrap(); - let entries = fs::read_dir(path) - .unwrap() - .filter_map(Result::ok) - .collect::>(); - - entries - .par_iter() - .flat_map(|entry| { - let path = entry.path(); - if path.is_dir() { - self.scan_parallel(path) - } else { - vec![path] - } - }) - .collect() - } -} - -fn main() { - let path = PathBuf::from("/Users/hacker/Dev/learn"); - let start = std::time::Instant::now(); - let scanner = Scanner { - count: Arc::new(AtomicU64::new(0)), - }; - let results = scanner.scan_parallel(path); - println!("Scan Finished in {:?}", start.elapsed()); - println!("Found {} files", results.len()); - println!("Directories scanned: {}", scanner.count.load(Ordering::SeqCst)); -} diff --git a/cli/src/lib.rs b/scanner/src/cleaner.rs similarity index 92% rename from cli/src/lib.rs rename to scanner/src/cleaner.rs index 0136ddb..c460c3f 100644 --- a/cli/src/lib.rs +++ b/scanner/src/cleaner.rs @@ -2,8 +2,8 @@ use color_eyre::Result; use fs_extra::dir::get_size; use human_bytes::human_bytes; use indicatif::ProgressBar; -use scanner::results::AnalyzeTarget; -use std::{io::Write, time::Duration}; +use crate::results::AnalyzeTarget; +use std::io::Write; pub struct Cleaner { pub bytes_cleaned: u128, @@ -24,7 +24,9 @@ impl Cleaner { if !self.dry_run { std::fs::remove_dir_all(&target.path)?; } - let size = target.size.unwrap_or_else(|| get_size(target.path.clone()).unwrap_or(0)); + let size = target + .size + .unwrap_or_else(|| get_size(target.path.clone()).unwrap_or(0)); self.bytes_cleaned += size as u128; pb.inc(1); } diff --git a/scanner/src/lib.rs b/scanner/src/lib.rs index b033995..457635a 100644 --- a/scanner/src/lib.rs +++ b/scanner/src/lib.rs @@ -1,3 +1,4 @@ pub mod predicates; pub mod results; pub mod scanner; +pub mod cleaner; \ No newline at end of file diff --git a/cli/src/main.rs b/scanner/src/main.rs similarity index 97% rename from cli/src/main.rs rename to scanner/src/main.rs index 57ddd2e..1a0d1bf 100644 --- a/cli/src/main.rs +++ b/scanner/src/main.rs @@ -1,12 +1,12 @@ use clap::{Parser, Subcommand}; use color_eyre::Result; -use devclean::Cleaner; -use dialoguer::{theme::ColorfulTheme, MultiSelect}; -use human_bytes::human_bytes; -use scanner::{ +use devclean::cleaner::Cleaner; +use devclean::{ results::AnalyzeTargets, scanner::{get_dirty_git_repo_scanner, get_project_garbage_scanner}, }; +use dialoguer::{theme::ColorfulTheme, MultiSelect}; +use human_bytes::human_bytes; use std::path::PathBuf; /// Simple program to greet a person @@ -62,7 +62,6 @@ fn main() -> Result<()> { } let removable_scanner = get_project_garbage_scanner(args.depth, true); let mut cleaner = Cleaner::new(args.dry_run, args.all); - let start = std::time::Instant::now(); let mut target_paths = removable_scanner.scan_parallel(&path, 0); target_paths.sort_by(|a, b| b.cmp(a)); let to_clean = if args.yes { From 50e4d40823eb8e9eccd2d9c80588c1341e451e9b Mon Sep 17 00:00:00 2001 From: Huakun Shen Date: Mon, 6 May 2024 04:24:46 -0400 Subject: [PATCH 2/3] Rename scanner folder to devclean folder --- {scanner => devclean}/Cargo.toml | 0 {scanner => devclean}/src/cleaner.rs | 0 {scanner => devclean}/src/lib.rs | 0 {scanner => devclean}/src/main.rs | 0 {scanner => devclean}/src/predicates/general.rs | 0 {scanner => devclean}/src/predicates/languages/git.rs | 0 {scanner => devclean}/src/predicates/languages/mod.rs | 0 {scanner => devclean}/src/predicates/languages/node.rs | 0 {scanner => devclean}/src/predicates/languages/rust.rs | 0 {scanner => devclean}/src/predicates/mod.rs | 0 {scanner => devclean}/src/predicates/stop.rs | 0 {scanner => devclean}/src/results.rs | 0 {scanner => devclean}/src/scanner.rs | 0 13 files changed, 0 insertions(+), 0 deletions(-) rename {scanner => devclean}/Cargo.toml (100%) rename {scanner => devclean}/src/cleaner.rs (100%) rename {scanner => devclean}/src/lib.rs (100%) rename {scanner => devclean}/src/main.rs (100%) rename {scanner => devclean}/src/predicates/general.rs (100%) rename {scanner => devclean}/src/predicates/languages/git.rs (100%) rename {scanner => devclean}/src/predicates/languages/mod.rs (100%) rename {scanner => devclean}/src/predicates/languages/node.rs (100%) rename {scanner => devclean}/src/predicates/languages/rust.rs (100%) rename {scanner => devclean}/src/predicates/mod.rs (100%) rename {scanner => devclean}/src/predicates/stop.rs (100%) rename {scanner => devclean}/src/results.rs (100%) rename {scanner => devclean}/src/scanner.rs (100%) diff --git a/scanner/Cargo.toml b/devclean/Cargo.toml similarity index 100% rename from scanner/Cargo.toml rename to devclean/Cargo.toml diff --git a/scanner/src/cleaner.rs b/devclean/src/cleaner.rs similarity index 100% rename from scanner/src/cleaner.rs rename to devclean/src/cleaner.rs diff --git a/scanner/src/lib.rs b/devclean/src/lib.rs similarity index 100% rename from scanner/src/lib.rs rename to devclean/src/lib.rs diff --git a/scanner/src/main.rs b/devclean/src/main.rs similarity index 100% rename from scanner/src/main.rs rename to devclean/src/main.rs diff --git a/scanner/src/predicates/general.rs b/devclean/src/predicates/general.rs similarity index 100% rename from scanner/src/predicates/general.rs rename to devclean/src/predicates/general.rs diff --git a/scanner/src/predicates/languages/git.rs b/devclean/src/predicates/languages/git.rs similarity index 100% rename from scanner/src/predicates/languages/git.rs rename to devclean/src/predicates/languages/git.rs diff --git a/scanner/src/predicates/languages/mod.rs b/devclean/src/predicates/languages/mod.rs similarity index 100% rename from scanner/src/predicates/languages/mod.rs rename to devclean/src/predicates/languages/mod.rs diff --git a/scanner/src/predicates/languages/node.rs b/devclean/src/predicates/languages/node.rs similarity index 100% rename from scanner/src/predicates/languages/node.rs rename to devclean/src/predicates/languages/node.rs diff --git a/scanner/src/predicates/languages/rust.rs b/devclean/src/predicates/languages/rust.rs similarity index 100% rename from scanner/src/predicates/languages/rust.rs rename to devclean/src/predicates/languages/rust.rs diff --git a/scanner/src/predicates/mod.rs b/devclean/src/predicates/mod.rs similarity index 100% rename from scanner/src/predicates/mod.rs rename to devclean/src/predicates/mod.rs diff --git a/scanner/src/predicates/stop.rs b/devclean/src/predicates/stop.rs similarity index 100% rename from scanner/src/predicates/stop.rs rename to devclean/src/predicates/stop.rs diff --git a/scanner/src/results.rs b/devclean/src/results.rs similarity index 100% rename from scanner/src/results.rs rename to devclean/src/results.rs diff --git a/scanner/src/scanner.rs b/devclean/src/scanner.rs similarity index 100% rename from scanner/src/scanner.rs rename to devclean/src/scanner.rs From 463b9cd286071c99635d5ca6011149456edd8359 Mon Sep 17 00:00:00 2001 From: Huakun Shen Date: Mon, 6 May 2024 04:27:46 -0400 Subject: [PATCH 3/3] chore: Update devclean project metadata --- devclean/Cargo.toml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/devclean/Cargo.toml b/devclean/Cargo.toml index 54e12d1..fbe4967 100644 --- a/devclean/Cargo.toml +++ b/devclean/Cargo.toml @@ -2,6 +2,9 @@ name = "devclean" version = "0.1.0" edition = "2021" +description = "A tool to clean up your development environment" +license = "MIT" +repository = "https://github.com/HuakunShen/devclean" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html