diff --git a/nextest-runner/src/cargo_config/discovery.rs b/nextest-runner/src/cargo_config/discovery.rs index d4664ebc4ad..3b3bc325b04 100644 --- a/nextest-runner/src/cargo_config/discovery.rs +++ b/nextest-runner/src/cargo_config/discovery.rs @@ -77,9 +77,14 @@ impl CargoConfigs { pub(crate) fn discovered_configs( &self, ) -> impl Iterator> + DoubleEndedIterator + '_ { - // TODO/NOTE: https://github.com/rust-lang/cargo/issues/10992 means that currently - // environment variables are privileged over files passed in over the CLI. Once this - // behavior is fixed in upstream cargo, it should also be fixed here. + // NOTE: The order is: + // 1. --config k=v + // 2. --config + // 3. Environment variables + // 4. .cargo/configs. + // + // 2 and 3 used to be reversed in older versions of Rust, but this has been fixed as of Rust + // 1.68 (https://github.com/rust-lang/cargo/pull/11077). let cli_option_iter = self.cli_configs.iter().filter_map(|(source, config)| { matches!(source, CargoConfigSource::CliOption) .then(|| DiscoveredConfig::CliOption { config, source }) @@ -96,8 +101,8 @@ impl CargoConfigs { .map(|(source, config)| DiscoveredConfig::File { config, source }); cli_option_iter - .chain(std::iter::once(DiscoveredConfig::Env)) .chain(cli_file_iter) + .chain(std::iter::once(DiscoveredConfig::Env)) .chain(cargo_config_file_iter) } } diff --git a/nextest-runner/src/cargo_config/target_triple.rs b/nextest-runner/src/cargo_config/target_triple.rs index 6ff14a0d412..94c4748d136 100644 --- a/nextest-runner/src/cargo_config/target_triple.rs +++ b/nextest-runner/src/cargo_config/target_triple.rs @@ -301,8 +301,10 @@ mod tests { }) ); - // --config should be parsed correctly. Config files currently come after - // keys and values passed in via --config, and after the environment. + // --config should be parsed correctly. Config files passed in via --config currently + // come after keys and values passed in via --config, and before the environment (this + // didn't used to be the case in older versions of Rust, but is now the case as of Rust 1.68 + // with https://github.com/rust-lang/cargo/pull/11077). assert_eq!( find_target_triple(&["extra-config.toml"], None, &dir_foo_path, &dir_path), Some(TargetTriple { @@ -320,8 +322,10 @@ mod tests { &dir_path ), Some(TargetTriple { - platform: platform("aarch64-pc-windows-msvc"), - source: TargetTripleSource::Env, + platform: platform("aarch64-unknown-linux-gnu"), + source: TargetTripleSource::CargoConfig { + source: CargoConfigSource::File(dir_foo_path.join("extra-config.toml")), + }, }) ); assert_eq!(