mirror of
https://github.com/rust-lang/cargo
synced 2024-10-13 19:22:33 +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
|
||||
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)
|
||||
} else {
|
||||
// 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()) {
|
||||
return true;
|
||||
return Ok(true);
|
||||
}
|
||||
// See ConfigMapAccess for a description of this.
|
||||
if env_prefix_ok {
|
||||
let env_prefix = format!("{}_", key.as_env_key());
|
||||
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 o_cv.is_some() {
|
||||
return true;
|
||||
}
|
||||
if self.get_cv(key)?.is_some() {
|
||||
return Ok(true);
|
||||
}
|
||||
self.check_environment_key_case_mismatch(key);
|
||||
|
||||
false
|
||||
Ok(false)
|
||||
}
|
||||
|
||||
fn check_environment_key_case_mismatch(&self, key: &ConfigKey) {
|
||||
|
|
|
@ -19,8 +19,8 @@ fn bad1() {
|
|||
.with_status(101)
|
||||
.with_stderr(
|
||||
"\
|
||||
[ERROR] invalid configuration for key `target.nonexistent-target`
|
||||
expected a table, but found a string for `[..]` in [..]config
|
||||
[ERROR] expected table for configuration key `target.nonexistent-target`, \
|
||||
but found string in [..]config
|
||||
",
|
||||
)
|
||||
.run();
|
||||
|
|
|
@ -21,7 +21,7 @@ fn alias_incorrect_config_type() {
|
|||
|
||||
p.cargo("b-cargo-test -v")
|
||||
.with_status(101)
|
||||
.with_stderr_contains(
|
||||
.with_stderr(
|
||||
"\
|
||||
[ERROR] invalid configuration for key `alias.b-cargo-test`
|
||||
expected a list, but found a integer for [..]",
|
||||
|
@ -47,9 +47,21 @@ fn alias_malformed_config_string() {
|
|||
.with_status(101)
|
||||
.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();
|
||||
|
@ -73,9 +85,19 @@ fn alias_malformed_config_list() {
|
|||
.with_status(101)
|
||||
.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();
|
||||
|
|
|
@ -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]
|
||||
|
|
Loading…
Reference in a new issue