From a8e816b079ff5515d04cd7ea3789747f5f347e66 Mon Sep 17 00:00:00 2001 From: Ed Page Date: Thu, 11 Apr 2024 14:36:50 -0500 Subject: [PATCH 1/3] test(resolve): Show no-MSRV case --- tests/testsuite/rust_version.rs | 49 +++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/tests/testsuite/rust_version.rs b/tests/testsuite/rust_version.rs index 6ed36dab9..8454d3f40 100644 --- a/tests/testsuite/rust_version.rs +++ b/tests/testsuite/rust_version.rs @@ -370,6 +370,55 @@ 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 +", + ) + .run(); +} + #[cargo_test] fn dependency_rust_version_backtracking() { Package::new("has-rust-version", "1.6.0") From b7b3874d097fd262d49eb65f52c1bb6ea9975dd8 Mon Sep 17 00:00:00 2001 From: Ed Page Date: Thu, 11 Apr 2024 14:38:02 -0500 Subject: [PATCH 2/3] refactor(resolve): Make it easier to extend MSRV logic --- src/cargo/ops/resolve.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/cargo/ops/resolve.rs b/src/cargo/ops/resolve.rs index e9af9f975..bedca23be 100644 --- a/src/cargo/ops/resolve.rs +++ b/src/cargo/ops/resolve.rs @@ -304,7 +304,8 @@ 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 = ws.rust_version().cloned().map(RustVersion::into_partial); + version_prefs.max_rust_version(rust_version); } let avoid_patch_ids = if register_patches { From 38718eaa936b82919d988aa6cc617ed83c4b5528 Mon Sep 17 00:00:00 2001 From: Ed Page Date: Thu, 11 Apr 2024 14:40:52 -0500 Subject: [PATCH 3/3] feat(resolve): Fallback to 'rustc -V' for MSRV resolving --- src/cargo/ops/resolve.rs | 11 ++++++++--- tests/testsuite/rust_version.rs | 1 + 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/cargo/ops/resolve.rs b/src/cargo/ops/resolve.rs index bedca23be..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,8 +303,14 @@ pub fn resolve_with_previous<'gctx>( version_prefs.version_ordering(VersionOrdering::MinimumVersionsFirst) } if ws.resolve_honors_rust_version() { - let rust_version = ws.rust_version().cloned().map(RustVersion::into_partial); - version_prefs.max_rust_version(rust_version); + 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 8454d3f40..d6e49091e 100644 --- a/tests/testsuite/rust_version.rs +++ b/tests/testsuite/rust_version.rs @@ -414,6 +414,7 @@ fn resolve_with_rustc() { "\ [UPDATING] `dummy-registry` index [LOCKING] 2 packages +[ADDING] bar v1.5.0 (latest: v1.6.0) ", ) .run();