use atty::Stream; use clap::Parser; use log::{set_max_level, LevelFilter}; use node_prune::{Config, Prune, Stats}; use serde_json::json; use std::time::Instant; #[tokio::main] async fn main() -> anyhow::Result<()> { set_max_level(LevelFilter::Warn); let now = Instant::now(); let config = Config::parse(); if config.verbose { set_max_level(LevelFilter::Debug); } let mut prune = Prune::new(); if config.path.exists() { prune.dir = config.path; } let mut stats: Stats = Default::default(); if prune.dir.exists() { stats = prune.run().await?; } if atty::is(Stream::Stdout) { println!(); println!("\t files total: {}", stats.files_total); println!("\t files removed: {}", stats.files_removed); println!( "\t removed size: {:.1}M", (stats.removed_size as f64) / 1024f64 / 1024f64 ); println!("\t duration: {}ms", now.elapsed().as_millis()); println!(); } else { let json_stats = json!(&stats); println!("{}", json_stats); } Ok(()) }