use std::{
os::unix::fs::PermissionsExt,
path::{Path, PathBuf},
sync::{Mutex, MutexGuard},
};
use crate::config::AskConfig;
static EXEC_LOCK: Mutex<()> = Mutex::new(());
pub(crate) fn exec_lock() -> MutexGuard<'static, ()> {
EXEC_LOCK.lock().unwrap_or_else(|p| p.into_inner())
}
pub(crate) fn fake_cli(dir: &Path, body: &str) -> PathBuf {
let path = dir.join("fake-claude");
std::fs::write(&path, format!("#!/bin/sh\n{body}\n")).unwrap();
std::fs::set_permissions(&path, std::fs::Permissions::from_mode(0o755)).unwrap();
path
}
pub(crate) fn fake_reply(dir: &Path, reply: &str) -> PathBuf {
let out = dir.join("fake-reply");
std::fs::write(&out, reply).unwrap();
fake_cli(dir, &format!("cat >/dev/null; cat {}", out.display()))
}
pub(crate) fn fake_arg_reply(dir: &Path, reply: &str) -> PathBuf {
let out = dir.join("fake-arg-reply");
std::fs::write(&out, reply).unwrap();
fake_cli(dir, &format!("cat {}", out.display()))
}
pub(crate) fn ask_config(command: &Path) -> AskConfig {
AskConfig {
command: command.to_str().unwrap().to_string(),
timeout_secs: 10,
..AskConfig::default()
}
}