use crate::icp::CANIC_ICP_IDENTITY_PASSWORD_FILE_ENV;
use std::{
env,
ffi::{OsStr, OsString},
process::Command,
};
const WITHHELD_INPUTS: [&str; 3] = [
CANIC_ICP_IDENTITY_PASSWORD_FILE_ENV,
"CODEX_SESSION_ID",
"CODEX_THREAD_ID",
];
pub fn command(program: impl AsRef<OsStr>) -> Command {
let mut command = Command::new(program);
apply(&mut command);
command
}
pub fn apply(command: &mut Command) {
for key in WITHHELD_INPUTS {
command.env_remove(key);
}
command.env("SHLVL", "0");
}
pub fn inputs() -> Vec<(OsString, OsString)> {
env::vars_os()
.filter(|(key, _)| {
key != "SHLVL" && !WITHHELD_INPUTS.iter().any(|name| key == OsStr::new(name))
})
.chain([(OsString::from("SHLVL"), OsString::from("0"))])
.collect()
}