feat: update depot version to 0.12.0 and refactor environment variable handling in tests

This commit is contained in:
2026-03-09 02:44:43 -05:00
parent e367cb02d7
commit a46ff3a99b
10 changed files with 235 additions and 122 deletions
+50
View File
@@ -0,0 +1,50 @@
use std::collections::BTreeMap;
use std::env;
use std::ffi::{OsStr, OsString};
use std::sync::{Mutex, MutexGuard, OnceLock};
fn env_lock() -> &'static Mutex<()> {
static ENV_LOCK: OnceLock<Mutex<()>> = OnceLock::new();
ENV_LOCK.get_or_init(|| Mutex::new(()))
}
pub(crate) struct TestEnv {
_guard: MutexGuard<'static, ()>,
saved: BTreeMap<String, Option<OsString>>,
}
impl TestEnv {
pub(crate) fn new() -> Self {
Self {
_guard: env_lock().lock().expect("test env lock poisoned"),
saved: BTreeMap::new(),
}
}
pub(crate) fn set_var(&mut self, key: &str, value: impl AsRef<OsStr>) {
self.snapshot(key);
unsafe {
env::set_var(key, value);
}
}
fn snapshot(&mut self, key: &str) {
self.saved
.entry(key.to_string())
.or_insert_with(|| env::var_os(key));
}
}
impl Drop for TestEnv {
fn drop(&mut self) {
for (key, value) in &self.saved {
unsafe {
if let Some(value) = value {
env::set_var(key, value);
} else {
env::remove_var(key);
}
}
}
}
}