diff --git a/src/cargo/ops/resolve.rs b/src/cargo/ops/resolve.rs index e9af9f975..41aef8664 100644 --- a/src/cargo/ops/resolve.rs +++ b/src/cargo/ops/resolve.rs @@ -73,7 +73,6 @@ use crate::util::cache_lock::CacheLockMode; use crate::util::errors::CargoResult; use crate::util::CanonicalUrl; use anyhow::Context as _; -use cargo_util_schemas::manifest::RustVersion; use std::collections::{HashMap, HashSet}; use tracing::{debug, trace}; @@ -304,7 +303,14 @@ pub fn resolve_with_previous<'gctx>( version_prefs.version_ordering(VersionOrdering::MinimumVersionsFirst) } if ws.resolve_honors_rust_version() { - version_prefs.max_rust_version(ws.rust_version().cloned().map(RustVersion::into_partial)); + let rust_version = if let Some(ver) = ws.rust_version() { + ver.clone().into_partial() + } else { + let rustc = ws.gctx().load_global_rustc(Some(ws))?; + let rustc_version = rustc.version.clone().into(); + rustc_version + }; + version_prefs.max_rust_version(Some(rust_version)); } let avoid_patch_ids = if register_patches { diff --git a/tests/testsuite/rust_version.rs b/tests/testsuite/rust_version.rs index 6ed36dab9..d6e49091e 100644 --- a/tests/testsuite/rust_version.rs +++ b/tests/testsuite/rust_version.rs @@ -370,6 +370,56 @@ fn dependency_rust_version_older_and_newer_than_package() { .run(); } +#[cargo_test] +fn resolve_with_rustc() { + Package::new("bar", "1.5.0") + .rust_version("1.0") + .file("src/lib.rs", "fn other_stuff() {}") + .publish(); + Package::new("bar", "1.6.0") + .rust_version("1.2345") + .file("src/lib.rs", "fn other_stuff() {}") + .publish(); + + let p = project() + .file( + "Cargo.toml", + r#" + [package] + name = "foo" + version = "0.0.1" + edition = "2015" + authors = [] + [dependencies] + bar = "1.0.0" + "#, + ) + .file("src/main.rs", "fn main(){}") + .build(); + + p.cargo("generate-lockfile --ignore-rust-version") + .arg("-Zmsrv-policy") + .masquerade_as_nightly_cargo(&["msrv-policy"]) + .with_stderr( + "\ +[UPDATING] `dummy-registry` index +[LOCKING] 2 packages +", + ) + .run(); + p.cargo("generate-lockfile") + .arg("-Zmsrv-policy") + .masquerade_as_nightly_cargo(&["msrv-policy"]) + .with_stderr( + "\ +[UPDATING] `dummy-registry` index +[LOCKING] 2 packages +[ADDING] bar v1.5.0 (latest: v1.6.0) +", + ) + .run(); +} + #[cargo_test] fn dependency_rust_version_backtracking() { Package::new("has-rust-version", "1.6.0")