Skip to main content

flodl_cli/libtorch/
manage.rs

1//! Variant management: remove installed libtorch variants.
2
3use std::fs;
4use std::path::Path;
5
6use super::detect;
7
8/// Remove an installed libtorch variant.
9///
10/// If the removed variant was active, clears `libtorch/.active`.
11pub fn remove_variant(root: &Path, variant: &str) -> Result<(), String> {
12    if !detect::is_valid_variant(root, variant) {
13        return Err(format!(
14            "'{}' is not an installed libtorch variant.\n\
15             Expected: libtorch/{}/lib/ to exist.",
16            variant, variant
17        ));
18    }
19
20    let variant_dir = root.join(format!("libtorch/{}", variant));
21
22    // Check if this is the active variant
23    let was_active = detect::read_active(root)
24        .is_some_and(|info| info.path == variant);
25
26    // Remove the directory
27    fs::remove_dir_all(&variant_dir)
28        .map_err(|e| format!("cannot remove {}: {}", variant_dir.display(), e))?;
29
30    println!("  Removed: {}", variant);
31
32    // Clear .active if this was the active variant
33    if was_active {
34        let active_path = root.join("libtorch/.active");
35        let _ = fs::write(&active_path, "");
36        println!("  Cleared active variant (was pointing to removed variant).");
37        println!("  Run 'fdl libtorch activate <variant>' to set a new one.");
38    }
39
40    Ok(())
41}