use std::env;
use std::fs;
use std::path::PathBuf;
use super::args::Cli;
use super::manifold::is_implicit_open;
const ACK_FILENAME: &str = "opened";
const BANNER: &str =
"burn: running with open capabilities. --sandbox to seal; BURN_QUIET=1 to silence.";
pub fn maybe_show(cli: &Cli) {
if cli.quiet {
return;
}
if env::var_os("BURN_QUIET").is_some() {
return;
}
if !is_implicit_open(cli) {
return;
}
let marker = match ack_marker_path() {
Some(p) => p,
None => {
eprintln!("{BANNER}");
return;
}
};
if marker.exists() {
return;
}
eprintln!("{BANNER}");
if let Some(parent) = marker.parent() {
let _ = fs::create_dir_all(parent);
}
let _ = fs::write(&marker, b"1\n");
}
fn ack_marker_path() -> Option<PathBuf> {
#[cfg(windows)]
{
let base = env::var_os("LOCALAPPDATA").or_else(|| env::var_os("USERPROFILE"))?;
Some(PathBuf::from(base).join("burn").join(ACK_FILENAME))
}
#[cfg(not(windows))]
{
if let Some(xdg) = env::var_os("XDG_CACHE_HOME") {
return Some(PathBuf::from(xdg).join("burn").join(ACK_FILENAME));
}
let home = env::var_os("HOME")?;
Some(
PathBuf::from(home)
.join(".cache")
.join("burn")
.join(ACK_FILENAME),
)
}
}