mirror of
https://github.com/rust-lang/cargo.git
synced 2025-09-28 11:20:36 +00:00
Auto merge of #8939 - Andy-Python-Programmer:master, r=alexcrichton
Throw error if CARGO_TARGET_DIR is an empty string This pull request makes the target dir to be target/ if `CARGO_TARGET_DIR` is `` with spaces trimmed and not delete the current project. Fixes: #8866
This commit is contained in:
commit
f3e63d6ab4
@ -473,10 +473,24 @@ impl Config {
|
||||
if let Some(dir) = &self.target_dir {
|
||||
Ok(Some(dir.clone()))
|
||||
} else if let Some(dir) = env::var_os("CARGO_TARGET_DIR") {
|
||||
// Check if the CARGO_TARGET_DIR environment variable is set to an empty string.
|
||||
if dir.to_string_lossy() == "" {
|
||||
anyhow::bail!("the target directory is set to an empty string in the `CARGO_TARGET_DIR` environment variable")
|
||||
}
|
||||
|
||||
Ok(Some(Filesystem::new(self.cwd.join(dir))))
|
||||
} else if let Some(val) = &self.build_config()?.target_dir {
|
||||
let val = val.resolve_path(self);
|
||||
Ok(Some(Filesystem::new(val)))
|
||||
let path = val.resolve_path(self);
|
||||
|
||||
// Check if the target directory is set to an empty string in the config.toml file.
|
||||
if val.raw_value() == "" {
|
||||
anyhow::bail!(format!(
|
||||
"the target directory is set to an empty string in {}",
|
||||
val.value().definition
|
||||
),)
|
||||
}
|
||||
|
||||
Ok(Some(Filesystem::new(path)))
|
||||
} else {
|
||||
Ok(None)
|
||||
}
|
||||
|
@ -10,6 +10,11 @@ use std::path::PathBuf;
|
||||
pub struct ConfigRelativePath(Value<String>);
|
||||
|
||||
impl ConfigRelativePath {
|
||||
/// Returns the underlying value.
|
||||
pub fn value(&self) -> &Value<String> {
|
||||
&self.0
|
||||
}
|
||||
|
||||
/// Returns the raw underlying configuration value for this key.
|
||||
pub fn raw_value(&self) -> &str {
|
||||
&self.0.val
|
||||
|
@ -1460,3 +1460,31 @@ strip = 'debuginfo'
|
||||
let strip = p.strip.unwrap();
|
||||
assert_eq!(strip, toml::StringOrBool::String("debuginfo".to_string()));
|
||||
}
|
||||
|
||||
#[cargo_test]
|
||||
fn cargo_target_empty_cfg() {
|
||||
write_config(
|
||||
"\
|
||||
[build]
|
||||
target-dir = ''
|
||||
",
|
||||
);
|
||||
|
||||
let config = new_config();
|
||||
|
||||
assert_error(
|
||||
config.target_dir().unwrap_err(),
|
||||
"the target directory is set to an empty string in [..]/.cargo/config",
|
||||
);
|
||||
}
|
||||
|
||||
#[cargo_test]
|
||||
fn cargo_target_empty_env() {
|
||||
let project = project().build();
|
||||
|
||||
project.cargo("build")
|
||||
.env("CARGO_TARGET_DIR", "")
|
||||
.with_stderr("error: the target directory is set to an empty string in the `CARGO_TARGET_DIR` environment variable")
|
||||
.with_status(101)
|
||||
.run()
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user