|
1 | 1 | use std::borrow::Cow; |
2 | 2 | use std::fmt::{self, Debug, Display}; |
3 | | -use std::io; |
4 | 3 | use std::path::{Path, PathBuf}; |
5 | 4 | use std::str::FromStr; |
6 | 5 | use std::sync::Arc; |
| 6 | +use std::{env, io}; |
7 | 7 |
|
8 | 8 | use anyhow::{anyhow, bail, Context, Result}; |
9 | 9 | use serde::Deserialize; |
@@ -288,26 +288,20 @@ impl<'a> Cfg<'a> { |
288 | 288 | let default_host_triple = |
289 | 289 | settings_file.with(|s| Ok(get_default_host_triple(s, process)))?; |
290 | 290 | // Environment override |
291 | | - let env_override = process |
292 | | - .var("RUSTUP_TOOLCHAIN") |
293 | | - .ok() |
294 | | - .and_then(if_not_empty) |
| 291 | + let env_override = non_empty_env_var("RUSTUP_TOOLCHAIN", process)? |
295 | 292 | .map(ResolvableLocalToolchainName::try_from) |
296 | 293 | .transpose()? |
297 | 294 | .map(|t| t.resolve(&default_host_triple)) |
298 | 295 | .transpose()?; |
299 | 296 |
|
300 | | - let dist_root_server = match process.var("RUSTUP_DIST_SERVER") { |
301 | | - Ok(s) if !s.is_empty() => { |
| 297 | + let dist_root_server = match non_empty_env_var("RUSTUP_DIST_SERVER", process)? { |
| 298 | + Some(s) => { |
302 | 299 | trace!("`RUSTUP_DIST_SERVER` has been set to `{s}`"); |
303 | 300 | s |
304 | 301 | } |
305 | | - _ => { |
| 302 | + None => { |
306 | 303 | // For backward compatibility |
307 | | - process |
308 | | - .var("RUSTUP_DIST_ROOT") |
309 | | - .ok() |
310 | | - .and_then(if_not_empty) |
| 304 | + non_empty_env_var("RUSTUP_DIST_ROOT", process)? |
311 | 305 | .inspect(|url| trace!("`RUSTUP_DIST_ROOT` has been set to `{url}`")) |
312 | 306 | .map_or(Cow::Borrowed(dist::DEFAULT_DIST_ROOT), Cow::Owned) |
313 | 307 | .as_ref() |
@@ -1000,11 +994,12 @@ fn get_default_host_triple(s: &Settings, process: &Process) -> dist::TargetTripl |
1000 | 994 | .unwrap_or_else(|| dist::TargetTriple::from_host_or_build(process)) |
1001 | 995 | } |
1002 | 996 |
|
1003 | | -fn if_not_empty<S: PartialEq<str>>(s: S) -> Option<S> { |
1004 | | - if s == *"" { |
1005 | | - None |
1006 | | - } else { |
1007 | | - Some(s) |
| 997 | +fn non_empty_env_var(name: &str, process: &Process) -> anyhow::Result<Option<String>> { |
| 998 | + match process.var(name) { |
| 999 | + Ok(s) if !s.is_empty() => Ok(Some(s)), |
| 1000 | + Ok(_) => Ok(None), |
| 1001 | + Err(env::VarError::NotPresent) => Ok(None), |
| 1002 | + Err(err) => Err(err.into()), |
1008 | 1003 | } |
1009 | 1004 | } |
1010 | 1005 |
|
|
0 commit comments