ggen_cli_lib/cmds/
remove.rs1use anyhow::Result;
2use clap::Args;
3use ggen_core::{CacheManager, LockfileManager};
4use std::env;
5
6#[derive(Args, Debug)]
7pub struct RemoveArgs {
8 pub rpack_id: String,
10
11 #[arg(long)]
13 pub prune: bool,
14}
15
16pub fn run(args: &RemoveArgs) -> Result<()> {
17 let current_dir = env::current_dir()?;
19 let lockfile_manager = LockfileManager::new(¤t_dir);
20 let cache_manager = CacheManager::new()?;
21
22 if !lockfile_manager.is_installed(&args.rpack_id)? {
24 println!("Rpack '{}' is not installed", args.rpack_id);
25 return Ok(());
26 }
27
28 let pack_entry = lockfile_manager
30 .get(&args.rpack_id)?
31 .expect("Pack should exist since is_installed returned true");
32
33 let removed = lockfile_manager.remove(&args.rpack_id)?;
35 if !removed {
36 println!("Failed to remove rpack '{}' from lockfile", args.rpack_id);
37 return Ok(());
38 }
39
40 if args.prune {
42 if let Err(e) = cache_manager.remove(&args.rpack_id, &pack_entry.version) {
43 println!("Warning: Failed to remove rpack from cache: {}", e);
44 } else {
45 println!("Removed rpack from cache");
46 }
47 }
48
49 println!(
50 "✅ Successfully removed rpack '{}' version {}",
51 args.rpack_id, pack_entry.version
52 );
53
54 Ok(())
55}