Skip to main content

zoi_cli/cmd/
pin.rs

1use crate::pkg::{pin, resolve};
2use anyhow::Result;
3use colored::*;
4
5pub fn run(source: &str, version: &str) -> Result<()> {
6    let (pkg, _, _, _, _registry_handle, _, _) =
7        resolve::resolve_package_and_version(source, None, false, false)?;
8    let mut pinned_packages = pin::get_pinned_packages()?;
9
10    if pinned_packages.iter().any(|p| p.source == pkg.name) {
11        println!(
12            "Package '{}' is already pinned. Unpin it first to change the version.",
13            pkg.name
14        );
15        return Ok(());
16    }
17
18    let new_pin = pin::PinnedPackage {
19        source: pkg.name.clone(),
20        version: version.to_string(),
21    };
22    pinned_packages.push(new_pin);
23    pin::write_pinned_packages(&pinned_packages)?;
24
25    println!("Pinned {}@{}", pkg.name.green(), version.yellow());
26    Ok(())
27}