mirror of
https://github.com/rust-lang/cargo.git
synced 2025-10-01 11:30:39 +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 {
|
if let Some(dir) = &self.target_dir {
|
||||||
Ok(Some(dir.clone()))
|
Ok(Some(dir.clone()))
|
||||||
} else if let Some(dir) = env::var_os("CARGO_TARGET_DIR") {
|
} 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))))
|
Ok(Some(Filesystem::new(self.cwd.join(dir))))
|
||||||
} else if let Some(val) = &self.build_config()?.target_dir {
|
} else if let Some(val) = &self.build_config()?.target_dir {
|
||||||
let val = val.resolve_path(self);
|
let path = val.resolve_path(self);
|
||||||
Ok(Some(Filesystem::new(val)))
|
|
||||||
|
// 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 {
|
} else {
|
||||||
Ok(None)
|
Ok(None)
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,11 @@ use std::path::PathBuf;
|
|||||||
pub struct ConfigRelativePath(Value<String>);
|
pub struct ConfigRelativePath(Value<String>);
|
||||||
|
|
||||||
impl ConfigRelativePath {
|
impl ConfigRelativePath {
|
||||||
|
/// Returns the underlying value.
|
||||||
|
pub fn value(&self) -> &Value<String> {
|
||||||
|
&self.0
|
||||||
|
}
|
||||||
|
|
||||||
/// Returns the raw underlying configuration value for this key.
|
/// Returns the raw underlying configuration value for this key.
|
||||||
pub fn raw_value(&self) -> &str {
|
pub fn raw_value(&self) -> &str {
|
||||||
&self.0.val
|
&self.0.val
|
||||||
|
@ -1460,3 +1460,31 @@ strip = 'debuginfo'
|
|||||||
let strip = p.strip.unwrap();
|
let strip = p.strip.unwrap();
|
||||||
assert_eq!(strip, toml::StringOrBool::String("debuginfo".to_string()));
|
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