use purger_core::{CleanProgress, ProjectCleaner, cleaner::CleanConfig};
use std::fs;
use std::sync::{Arc, Mutex};
use tempfile::TempDir;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let temp_dir = TempDir::new()?;
let project_dir = temp_dir.path().join("test_project");
fs::create_dir_all(&project_dir)?;
let cargo_toml = r#"
[package]
name = "test_project"
version = "0.1.0"
edition = "2021"
[[bin]]
name = "test_project"
path = "src/main.rs"
"#;
fs::write(project_dir.join("Cargo.toml"), cargo_toml)?;
fs::create_dir_all(project_dir.join("src"))?;
fs::write(
project_dir.join("src").join("main.rs"),
"fn main() { println!(\"Hello, world!\"); }",
)?;
let target_dir = project_dir.join("target");
fs::create_dir_all(target_dir.join("debug"))?;
fs::write(target_dir.join("debug").join("test.exe"), "fake executable")?;
fs::write(target_dir.join("CACHEDIR.TAG"), "cache tag")?;
let project = purger_core::RustProject::from_path(&project_dir)?;
println!("测试项目: {}", project.name);
println!("Target 大小: {} bytes", project.target_size);
let progress_log = Arc::new(Mutex::new(Vec::<CleanProgress>::new()));
let progress_log_clone = progress_log.clone();
let config = CleanConfig::default();
let cleaner = ProjectCleaner::new(config);
println!("\n开始清理...");
let result = cleaner.clean_project_with_progress(&project, |progress| {
println!(
"进度: {} - {:?} - {}/{}",
progress.project_name,
progress.phase,
progress.files_processed,
progress.total_files.unwrap_or(0)
);
if let Some(file) = &progress.current_file {
println!(" 当前文件: {file}");
}
progress_log_clone.lock().unwrap().push(progress);
});
match result {
Ok(size_freed) => {
println!("\n清理成功! 释放空间: {size_freed} bytes");
}
Err(e) => {
println!("\n清理失败: {e}");
}
}
let log = progress_log.lock().unwrap();
println!("\n进度日志 ({} 条记录):", log.len());
for (i, progress) in log.iter().enumerate() {
println!(
" {}: {:?} - {}/{}",
i + 1,
progress.phase,
progress.files_processed,
progress.total_files.unwrap_or(0)
);
}
Ok(())
}