|
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