use std::sync::atomic::{AtomicU64, Ordering};
pub fn unique_path(label: &str) -> std::path::PathBuf {
static COUNTER: AtomicU64 = AtomicU64::new(0);
let n = COUNTER.fetch_add(1, Ordering::Relaxed);
let pid = std::process::id();
std::env::temp_dir().join(format!("talon-eval-{label}-{pid}-{n}"))
}
pub fn cleanup(p: &std::path::Path) {
let _ = fs_err::remove_file(p.join("idx.sqlite"));
let _ = fs_err::remove_file(p.join("idx.sqlite-wal"));
let _ = fs_err::remove_file(p.join("idx.sqlite-shm"));
let _ = fs_err::remove_dir_all(p);
}
pub fn seed_fixture_vault(vault: &std::path::Path) {
let fixtures = std::path::Path::new(env!("CARGO_MANIFEST_DIR")).join("tests/fixtures/vault");
copy_dir_all(&fixtures, vault);
}
fn copy_dir_all(src: &std::path::Path, dst: &std::path::Path) {
fs_err::create_dir_all(dst).unwrap();
for entry in std::fs::read_dir(src).unwrap() {
let entry = entry.unwrap();
let ty = entry.file_type().unwrap();
let from = entry.path();
let to = dst.join(entry.file_name());
if ty.is_dir() {
copy_dir_all(&from, &to);
} else {
fs_err::copy(&from, &to).unwrap();
}
}
}