use std::io::{IsTerminal, Write};
use std::path::Path;
#[derive(Debug, Clone)]
pub enum RootSource {
CliFlag,
Env,
Context(String),
WalkUp,
}
pub fn maybe_warn_root_source(source: &RootSource, root: &Path) {
if std::env::var_os("TEAMCTL_QUIET")
.map(|v| v == "1" || v == "true")
.unwrap_or(false)
{
return;
}
let body = match source {
RootSource::CliFlag | RootSource::WalkUp => return,
RootSource::Env => format!(
"using $TEAMCTL_ROOT={} (CWD walk-up would resolve elsewhere or fail)",
root.display()
),
RootSource::Context(name) => format!(
"using context '{}' \u{2192} {} (set via 'teamctl context use')",
name,
root.display()
),
};
let mut err = std::io::stderr().lock();
if err.is_terminal() {
let _ = writeln!(err, "\x1b[33mwarning:\x1b[0m {body}");
} else {
let _ = writeln!(err, "warning: {body}");
}
}