mirror of
https://github.com/rust-lang/cargo.git
synced 2025-09-28 11:20:36 +00:00
Dont swallow errors when checking existence of a config key
This commit is contained in:
parent
2c6647df80
commit
ef7a4ef062
@ -80,7 +80,7 @@ impl<'de, 'config> de::Deserializer<'de> for Deserializer<'config> {
|
|||||||
where
|
where
|
||||||
V: de::Visitor<'de>,
|
V: de::Visitor<'de>,
|
||||||
{
|
{
|
||||||
if self.config.has_key(&self.key, self.env_prefix_ok) {
|
if self.config.has_key(&self.key, self.env_prefix_ok)? {
|
||||||
visitor.visit_some(self)
|
visitor.visit_some(self)
|
||||||
} else {
|
} else {
|
||||||
// Treat missing values as `None`.
|
// Treat missing values as `None`.
|
||||||
|
@ -682,25 +682,25 @@ impl Config {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn has_key(&self, key: &ConfigKey, env_prefix_ok: bool) -> bool {
|
/// Check if the [`Config`] contains a given [`ConfigKey`].
|
||||||
|
///
|
||||||
|
/// See `ConfigMapAccess` for a description of `env_prefix_ok`.
|
||||||
|
fn has_key(&self, key: &ConfigKey, env_prefix_ok: bool) -> CargoResult<bool> {
|
||||||
if self.env.contains_key(key.as_env_key()) {
|
if self.env.contains_key(key.as_env_key()) {
|
||||||
return true;
|
return Ok(true);
|
||||||
}
|
}
|
||||||
// See ConfigMapAccess for a description of this.
|
|
||||||
if env_prefix_ok {
|
if env_prefix_ok {
|
||||||
let env_prefix = format!("{}_", key.as_env_key());
|
let env_prefix = format!("{}_", key.as_env_key());
|
||||||
if self.env.keys().any(|k| k.starts_with(&env_prefix)) {
|
if self.env.keys().any(|k| k.starts_with(&env_prefix)) {
|
||||||
return true;
|
return Ok(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if let Ok(o_cv) = self.get_cv(key) {
|
if self.get_cv(key)?.is_some() {
|
||||||
if o_cv.is_some() {
|
return Ok(true);
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
self.check_environment_key_case_mismatch(key);
|
self.check_environment_key_case_mismatch(key);
|
||||||
|
|
||||||
false
|
Ok(false)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn check_environment_key_case_mismatch(&self, key: &ConfigKey) {
|
fn check_environment_key_case_mismatch(&self, key: &ConfigKey) {
|
||||||
|
@ -19,8 +19,8 @@ fn bad1() {
|
|||||||
.with_status(101)
|
.with_status(101)
|
||||||
.with_stderr(
|
.with_stderr(
|
||||||
"\
|
"\
|
||||||
[ERROR] invalid configuration for key `target.nonexistent-target`
|
[ERROR] expected table for configuration key `target.nonexistent-target`, \
|
||||||
expected a table, but found a string for `[..]` in [..]config
|
but found string in [..]config
|
||||||
",
|
",
|
||||||
)
|
)
|
||||||
.run();
|
.run();
|
||||||
|
@ -21,7 +21,7 @@ fn alias_incorrect_config_type() {
|
|||||||
|
|
||||||
p.cargo("b-cargo-test -v")
|
p.cargo("b-cargo-test -v")
|
||||||
.with_status(101)
|
.with_status(101)
|
||||||
.with_stderr_contains(
|
.with_stderr(
|
||||||
"\
|
"\
|
||||||
[ERROR] invalid configuration for key `alias.b-cargo-test`
|
[ERROR] invalid configuration for key `alias.b-cargo-test`
|
||||||
expected a list, but found a integer for [..]",
|
expected a list, but found a integer for [..]",
|
||||||
@ -47,9 +47,21 @@ fn alias_malformed_config_string() {
|
|||||||
.with_status(101)
|
.with_status(101)
|
||||||
.with_stderr(
|
.with_stderr(
|
||||||
"\
|
"\
|
||||||
[ERROR] no such subcommand: `b-cargo-test`
|
[ERROR] could not load Cargo configuration
|
||||||
|
|
||||||
<tab>View all installed commands with `cargo --list`
|
Caused by:
|
||||||
|
could not parse TOML configuration in `[..]/config`
|
||||||
|
|
||||||
|
Caused by:
|
||||||
|
[..]
|
||||||
|
|
||||||
|
Caused by:
|
||||||
|
TOML parse error at line [..]
|
||||||
|
|
|
||||||
|
3 | b-cargo-test = `
|
||||||
|
| ^
|
||||||
|
Unexpected ```
|
||||||
|
Expected quoted string
|
||||||
",
|
",
|
||||||
)
|
)
|
||||||
.run();
|
.run();
|
||||||
@ -73,9 +85,19 @@ fn alias_malformed_config_list() {
|
|||||||
.with_status(101)
|
.with_status(101)
|
||||||
.with_stderr(
|
.with_stderr(
|
||||||
"\
|
"\
|
||||||
[ERROR] no such subcommand: `b-cargo-test`
|
[ERROR] could not load Cargo configuration
|
||||||
|
|
||||||
<tab>View all installed commands with `cargo --list`
|
Caused by:
|
||||||
|
failed to load TOML configuration from `[..]/config`
|
||||||
|
|
||||||
|
Caused by:
|
||||||
|
[..] `alias`
|
||||||
|
|
||||||
|
Caused by:
|
||||||
|
[..] `b-cargo-test`
|
||||||
|
|
||||||
|
Caused by:
|
||||||
|
expected string but found integer in list
|
||||||
",
|
",
|
||||||
)
|
)
|
||||||
.run();
|
.run();
|
||||||
|
@ -1074,10 +1074,6 @@ Dotted key `ssl-version` attempted to extend non-table type (string)
|
|||||||
|
|
||||||
",
|
",
|
||||||
);
|
);
|
||||||
assert!(config
|
|
||||||
.get::<Option<SslVersionConfig>>("http.ssl-version")
|
|
||||||
.unwrap()
|
|
||||||
.is_none());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cargo_test]
|
#[cargo_test]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user