use super::{Error, Fx, Outcome};
use crate::harness_root;
use crate::skill::census;
use crate::template::{GitRunner, RealGit};
use crate::workspace::{self, DEFAULT_CONFIG_NAME};
use std::path::PathBuf;
#[derive(clap::Args, Debug)]
pub struct Args {
pub workspace: PathBuf,
#[arg(long)]
pub config: Option<String>,
}
pub fn run(args: Args, _fx: &mut Fx) -> Result<Outcome, Error> {
let e = |source: &dyn std::fmt::Display| Error::new("skills", source);
let git = RealGit::new();
workspace::require(&args.workspace).map_err(|s| e(&s))?;
let name = args.config.as_deref().unwrap_or(DEFAULT_CONFIG_NAME);
workspace::require_lineage(&args.workspace, name, &git).map_err(|s| e(&s))?;
let spec = format!("{}^{{commit}}", workspace::config_ref(name));
let commit = git
.run_capture(&workspace::repo_git(&args.workspace), &["rev-parse", &spec])
.map_err(|s| e(&s))?
.trim()
.to_owned();
let roots = harness_root::resolve().map_err(|s| e(&s))?;
let rows = census::census(&args.workspace, &commit, &roots.data, &git);
Ok(Outcome::Line(census::render(&rows)))
}