| 101 | |
| 102 | impl IsolatedEnv { |
| 103 | fn build(env_lock: tokio::sync::MutexGuard<'static, ()>) -> (Self, PathBuf) { |
| 104 | let dir = tempdir_or_panic(); |
| 105 | let storage = TraceDecayStorageEnvGuard::for_tempdir(&dir); |
| 106 | let project = dir.path().join("project"); |
| 107 | fs::create_dir_all(&project).unwrap_or_else(|err| { |
| 108 | panic!( |
| 109 | "failed to create isolated project directory '{}': {err}", |
| 110 | project.display() |
| 111 | ) |
| 112 | }); |
| 113 | ( |
| 114 | Self { |
| 115 | storage, |
| 116 | _dir: dir, |
| 117 | _env_lock: env_lock, |
| 118 | }, |
| 119 | project, |
| 120 | ) |
| 121 | } |
| 122 | |
| 123 | pub async fn acquire() -> (Self, PathBuf) { |
| 124 | Self::build(ISOLATED_ENV_LOCK.lock().await) |