|
1 | 1 | #[cfg(procmacro2_semver_exempt)] |
2 | 2 | use std::collections::HashSet; |
3 | 3 | use std::collections::{hash_map, HashMap}; |
| 4 | +use std::env::VarError; |
4 | 5 | use std::hash::{BuildHasherDefault, DefaultHasher}; |
5 | 6 | use std::path::{Path, PathBuf}; |
6 | 7 | use std::sync::{Arc, LazyLock, Mutex}; |
@@ -430,17 +431,23 @@ fn env(name: &str) -> Result<String, std::env::VarError> { |
430 | 431 | let tracked_value = if TRACKED_ENV_VARS.lock().unwrap().insert(name.to_string()) { |
431 | 432 | // Avoid tracking the same env var multiple times, which would undesirably modify |
432 | 433 | // build system state and thus behavior in case we change var values. |
433 | | - proc_macro::tracked_env::var(name) |
| 434 | + Some(proc_macro::tracked_env::var(name)) |
434 | 435 | } else { |
435 | 436 | None |
436 | 437 | }; |
437 | 438 | #[cfg(not(procmacro2_semver_exempt))] |
438 | 439 | let tracked_value = None; |
439 | 440 |
|
440 | | - tracked_value |
441 | | - .or_else(|| std::env::var(name).ok()) |
442 | | - .or_else(|| LOADED_ENV_VARS.lock().unwrap().get(name).cloned()) |
443 | | - .ok_or(std::env::VarError::NotPresent) |
| 441 | + match tracked_value.map_or_else(|| std::env::var(name), |var| var) { |
| 442 | + Ok(v) => Ok(v), |
| 443 | + Err(VarError::NotPresent) => LOADED_ENV_VARS |
| 444 | + .lock() |
| 445 | + .unwrap() |
| 446 | + .get(name) |
| 447 | + .cloned() |
| 448 | + .ok_or(VarError::NotPresent), |
| 449 | + Err(e) => Err(e), |
| 450 | + } |
444 | 451 | } |
445 | 452 |
|
446 | 453 | /// Load configuration environment variables from a `.env` file, without overriding existing |
|
0 commit comments