use crate::git;
use crate::lockfile::{store_key, LockedSkill};
use crate::manifest::{SkillSpec, Version};
use anyhow::Result;
pub fn resolve(spec: &SkillSpec) -> Result<LockedSkill> {
let version = spec.version()?;
let reference = version.label();
let commit = match &version {
Version::Commit(c) => c.clone(),
Version::Tag(t) => {
git::ls_remote(
&spec.git,
&[&format!("refs/tags/{t}"), &format!("refs/tags/{t}^{{}}")],
)?
}
Version::Branch(b) => git::ls_remote(&spec.git, &[&format!("refs/heads/{b}")])?,
};
let commit = commit.to_lowercase();
Ok(LockedSkill {
git: spec.git.clone(),
reference,
store: store_key(&spec.git, &commit),
path: spec.path.clone(),
commit,
})
}