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