use crate::git::GitRepo;
use anyhow::{bail, Result};
use colored::Colorize;
pub fn run_path(name: &str) -> Result<()> {
let path = resolve_path(name)?;
println!("{}", path.display());
Ok(())
}
pub fn run_go(name: &str) -> Result<()> {
let path = resolve_path(name)?;
if std::env::var("STAX_SHELL_INTEGRATION").is_ok() {
println!("{}", path.display());
} else {
println!(
"{} {}",
"Worktree path:".dimmed(),
path.display().to_string().cyan()
);
println!();
println!(
"{}",
"Tip: add shell integration for transparent cd:".dimmed()
);
println!(" {}", "stax shell-setup --install".cyan());
}
Ok(())
}
fn resolve_path(name: &str) -> Result<std::path::PathBuf> {
let repo = GitRepo::open()?;
let worktrees = repo.list_worktrees()?;
let found = worktrees.iter().find(|wt| {
wt.name == name
|| wt.branch.as_deref() == Some(name)
|| wt
.branch
.as_deref()
.map(|b| b.ends_with(&format!("/{}", name)))
.unwrap_or(false)
});
match found {
Some(wt) => Ok(wt.path.clone()),
None => bail!("No worktree named '{}'", name),
}
}