use crate::corpus::Corpus;
use crate::workspace::owners::matcher;
use anyhow::{Result, bail};
pub fn matched(c: &Corpus, path: &str) -> Option<String> {
let parts: Vec<&str> = path.split('/').collect();
c.cfg.raw.forbid.paths.iter().find_map(|pat| {
let m = matcher(pat)?;
(1..=parts.len()).any(|n| m.is_match(&parts[..n].join("/"))).then(|| pat.clone())
})
}
pub fn refuse(c: &Corpus, path: &str, hint: &str) -> Result<()> {
if let Some(pat) = matched(c, path) {
bail!("{path} matches the forbidden path {pat} in spec.toml [forbid]; {hint}");
}
Ok(())
}
pub const NO_LOCAL_HINT: &str = "create it with spec new --local (the git-ignored local directory), or change [forbid] paths or the type's directory";