use anyhow::Result;
use clap::Args;
use rgen_core::{CacheManager, LockfileManager};
use std::env;
#[derive(Args, Debug)]
pub struct RemoveArgs {
pub rpack_id: String,
#[arg(long)]
pub prune: bool,
}
pub fn run(args: &RemoveArgs) -> Result<()> {
let current_dir = env::current_dir()?;
let lockfile_manager = LockfileManager::new(¤t_dir);
let cache_manager = CacheManager::new()?;
if !lockfile_manager.is_installed(&args.rpack_id)? {
println!("Rpack '{}' is not installed", args.rpack_id);
return Ok(());
}
let pack_entry = lockfile_manager
.get(&args.rpack_id)?
.expect("Pack should exist since is_installed returned true");
let removed = lockfile_manager.remove(&args.rpack_id)?;
if !removed {
println!("Failed to remove rpack '{}' from lockfile", args.rpack_id);
return Ok(());
}
if args.prune {
if let Err(e) = cache_manager.remove(&args.rpack_id, &pack_entry.version) {
println!("Warning: Failed to remove rpack from cache: {}", e);
} else {
println!("Removed rpack from cache");
}
}
println!(
"✅ Successfully removed rpack '{}' version {}",
args.rpack_id, pack_entry.version
);
Ok(())
}