From 38718eaa936b82919d988aa6cc617ed83c4b5528 Mon Sep 17 00:00:00 2001 From: Ed Page Date: Thu, 11 Apr 2024 14:40:52 -0500 Subject: [PATCH] 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();