main.rs 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. use std::{fs, path::PathBuf, process, env};
  2. fn find_target_dir(path: PathBuf) -> Result<bool, std::io::Error> {
  3. for entry in fs::read_dir(path)? {
  4. let entry = entry?;
  5. let p = entry.path();
  6. if p.is_dir() && p.ends_with("target") {
  7. return Ok(true);
  8. }
  9. }
  10. Ok(false)
  11. }
  12. fn execute_clean(path: PathBuf) -> Result<(), std::io::Error> {
  13. let _cmd = process::Command::new("cargo")
  14. .current_dir(path)
  15. .arg("clean")
  16. .status()?;
  17. Ok(())
  18. }
  19. fn clean_in_dir(path: PathBuf) -> Result<u64, std::io::Error> {
  20. let mut cleaned: u64 = 0;
  21. for entry in fs::read_dir(path)? {
  22. let entry = entry?;
  23. let p = entry.path();
  24. if p.is_dir() {
  25. let needed = find_target_dir(p.clone())?;
  26. if needed {
  27. println!(" => {}", p.display());
  28. execute_clean(p)?;
  29. cleaned += 1;
  30. }
  31. }
  32. }
  33. Ok(cleaned)
  34. }
  35. fn main() -> Result<(), std::io::Error> {
  36. println!("Rust Pan");
  37. let cwd = env::current_dir()?;
  38. let cleand = clean_in_dir(cwd)?;
  39. println!("Cleaned {} crates", cleand);
  40. Ok(())
  41. }