mirror of
https://github.com/rust-lang/cargo.git
synced 2025-09-28 11:20:36 +00:00
feat(resolve): Report MSRV compatible version instead of incomptible
This expands on #14461 to where only MSRV-compatible versions are "actionable". MSRV-incompatible versions are therefore unstyled. We report the MSRV needed so people can choose to unblock by updating their MSRV. I had wondered if we should report the the absolute latest MSRV-incompatible version or the one with the next higher MSRV from where the user is at. Both are reasonable use cases, so I erred with absolute latest version.
This commit is contained in:
parent
ded3f004a4
commit
911f5e17b6
@ -757,9 +757,20 @@ fn report_latest(possibilities: &[IndexSummary], change: &PackageChange) -> Opti
|
||||
}
|
||||
|
||||
let version_req = package_id.version().to_caret_req();
|
||||
let required_rust_version = change.required_rust_version.as_ref();
|
||||
|
||||
if let Some(summary) = possibilities
|
||||
.iter()
|
||||
.map(|s| s.as_summary())
|
||||
.filter(|s| {
|
||||
if let (Some(summary_rust_version), Some(required_rust_version)) =
|
||||
(s.rust_version(), required_rust_version)
|
||||
{
|
||||
summary_rust_version.is_compatible_with(required_rust_version)
|
||||
} else {
|
||||
true
|
||||
}
|
||||
})
|
||||
.filter(|s| package_id.version() != s.version() && version_req.matches(s.version()))
|
||||
.max_by_key(|s| s.version())
|
||||
{
|
||||
@ -772,6 +783,15 @@ fn report_latest(possibilities: &[IndexSummary], change: &PackageChange) -> Opti
|
||||
if let Some(summary) = possibilities
|
||||
.iter()
|
||||
.map(|s| s.as_summary())
|
||||
.filter(|s| {
|
||||
if let (Some(summary_rust_version), Some(required_rust_version)) =
|
||||
(s.rust_version(), required_rust_version)
|
||||
{
|
||||
summary_rust_version.is_compatible_with(required_rust_version)
|
||||
} else {
|
||||
true
|
||||
}
|
||||
})
|
||||
.filter(|s| is_latest(s.version(), package_id.version()))
|
||||
.max_by_key(|s| s.version())
|
||||
{
|
||||
@ -785,6 +805,38 @@ fn report_latest(possibilities: &[IndexSummary], change: &PackageChange) -> Opti
|
||||
return Some(report);
|
||||
}
|
||||
|
||||
if let Some(summary) = possibilities
|
||||
.iter()
|
||||
.map(|s| s.as_summary())
|
||||
.filter(|s| package_id.version() != s.version() && version_req.matches(s.version()))
|
||||
.max_by_key(|s| s.version())
|
||||
{
|
||||
let msrv_note = summary
|
||||
.rust_version()
|
||||
.map(|rv| format!(", requires Rust {rv}"))
|
||||
.unwrap_or_default();
|
||||
let warn = style::NOP;
|
||||
let version = summary.version();
|
||||
let report = format!(" {warn}(available: v{version}{msrv_note}){warn:#}");
|
||||
return Some(report);
|
||||
}
|
||||
|
||||
if let Some(summary) = possibilities
|
||||
.iter()
|
||||
.map(|s| s.as_summary())
|
||||
.filter(|s| is_latest(s.version(), package_id.version()))
|
||||
.max_by_key(|s| s.version())
|
||||
{
|
||||
let msrv_note = summary
|
||||
.rust_version()
|
||||
.map(|rv| format!(", requires Rust {rv}"))
|
||||
.unwrap_or_default();
|
||||
let warn = style::NOP;
|
||||
let version = summary.version();
|
||||
let report = format!(" {warn}(available: v{version}{msrv_note}){warn:#}");
|
||||
return Some(report);
|
||||
}
|
||||
|
||||
None
|
||||
}
|
||||
|
||||
|
@ -28,7 +28,7 @@
|
||||
</tspan>
|
||||
<tspan x="10px" y="82px"><tspan class="fg-green bold"> Locking</tspan><tspan> 1 package to latest Rust 1.70 compatible version</tspan>
|
||||
</tspan>
|
||||
<tspan x="10px" y="100px"><tspan class="fg-cyan bold"> Adding</tspan><tspan> rust-version-user v0.1.0 </tspan><tspan class="fg-yellow bold">(available: v0.2.1)</tspan>
|
||||
<tspan x="10px" y="100px"><tspan class="fg-cyan bold"> Adding</tspan><tspan> rust-version-user v0.1.0 (available: v0.2.1, requires Rust 1.72)</tspan>
|
||||
</tspan>
|
||||
<tspan x="10px" y="118px">
|
||||
</tspan>
|
||||
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
@ -28,7 +28,7 @@
|
||||
</tspan>
|
||||
<tspan x="10px" y="82px"><tspan class="fg-green bold"> Locking</tspan><tspan> 1 package to latest Rust [..] compatible version</tspan>
|
||||
</tspan>
|
||||
<tspan x="10px" y="100px"><tspan class="fg-cyan bold"> Adding</tspan><tspan> rust-version-user v0.1.1 </tspan><tspan class="fg-yellow bold">(available: v0.2.1)</tspan>
|
||||
<tspan x="10px" y="100px"><tspan class="fg-cyan bold"> Adding</tspan><tspan> rust-version-user v0.1.1 (available: v0.2.1, requires Rust 1.2345)</tspan>
|
||||
</tspan>
|
||||
<tspan x="10px" y="118px">
|
||||
</tspan>
|
||||
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
@ -28,7 +28,7 @@
|
||||
</tspan>
|
||||
<tspan x="10px" y="82px"><tspan class="fg-green bold"> Locking</tspan><tspan> 1 package to latest Rust [..] compatible version</tspan>
|
||||
</tspan>
|
||||
<tspan x="10px" y="100px"><tspan class="fg-cyan bold"> Adding</tspan><tspan> rust-version-user v0.1.1 </tspan><tspan class="fg-yellow bold">(available: v0.2.1)</tspan>
|
||||
<tspan x="10px" y="100px"><tspan class="fg-cyan bold"> Adding</tspan><tspan> rust-version-user v0.1.1 (available: v0.2.1, requires Rust 1.2345)</tspan>
|
||||
</tspan>
|
||||
<tspan x="10px" y="118px">
|
||||
</tspan>
|
||||
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
@ -242,7 +242,7 @@ foo v0.0.1 ([ROOT]/foo)
|
||||
.with_stderr_data(str![[r#"
|
||||
[UPDATING] `dummy-registry` index
|
||||
[LOCKING] 2 packages to latest Rust 1.60.0 compatible versions
|
||||
[ADDING] newer-and-older v1.5.0 (available: v1.6.0)
|
||||
[ADDING] newer-and-older v1.5.0 (available: v1.6.0, requires Rust 1.65.0)
|
||||
[ADDING] only-newer v1.6.0 (requires Rust 1.65.0)
|
||||
|
||||
"#]])
|
||||
@ -319,7 +319,7 @@ foo v0.0.1 ([ROOT]/foo)
|
||||
.with_stderr_data(str![[r#"
|
||||
[UPDATING] `dummy-registry` index
|
||||
[LOCKING] 2 packages to latest Rust 1.60.0 compatible versions
|
||||
[ADDING] newer-and-older v1.5.0 (available: v1.6.0)
|
||||
[ADDING] newer-and-older v1.5.0 (available: v1.6.0, requires Rust 1.2345)
|
||||
[ADDING] only-newer v1.6.0 (requires Rust 1.2345)
|
||||
|
||||
"#]])
|
||||
@ -490,7 +490,7 @@ higher v0.0.1 ([ROOT]/foo)
|
||||
.with_stderr_data(str![[r#"
|
||||
[UPDATING] `dummy-registry` index
|
||||
[LOCKING] 2 packages to latest Rust 1.50.0 compatible versions
|
||||
[ADDING] newer-and-older v1.5.0 (available: v1.6.0)
|
||||
[ADDING] newer-and-older v1.5.0 (available: v1.6.0, requires Rust 1.65.0)
|
||||
[ADDING] only-newer v1.6.0 (requires Rust 1.65.0)
|
||||
|
||||
"#]])
|
||||
@ -619,7 +619,7 @@ fn resolve_edition2024() {
|
||||
.with_stderr_data(str![[r#"
|
||||
[UPDATING] `dummy-registry` index
|
||||
[LOCKING] 2 packages to latest Rust 1.60.0 compatible versions
|
||||
[ADDING] newer-and-older v1.5.0 (available: v1.6.0)
|
||||
[ADDING] newer-and-older v1.5.0 (available: v1.6.0, requires Rust 1.65.0)
|
||||
[ADDING] only-newer v1.6.0 (requires Rust 1.65.0)
|
||||
|
||||
"#]])
|
||||
@ -723,7 +723,7 @@ fn resolve_v3() {
|
||||
.with_stderr_data(str![[r#"
|
||||
[UPDATING] `dummy-registry` index
|
||||
[LOCKING] 2 packages to latest Rust 1.60.0 compatible versions
|
||||
[ADDING] newer-and-older v1.5.0 (available: v1.6.0)
|
||||
[ADDING] newer-and-older v1.5.0 (available: v1.6.0, requires Rust 1.65.0)
|
||||
[ADDING] only-newer v1.6.0 (requires Rust 1.65.0)
|
||||
|
||||
"#]])
|
||||
@ -871,7 +871,7 @@ fn update_msrv_resolve() {
|
||||
.with_stderr_data(str![[r#"
|
||||
[UPDATING] `dummy-registry` index
|
||||
[LOCKING] 1 package to latest Rust 1.60.0 compatible version
|
||||
[ADDING] bar v1.5.0 (available: v1.6.0)
|
||||
[ADDING] bar v1.5.0 (available: v1.6.0, requires Rust 1.65.0)
|
||||
|
||||
"#]])
|
||||
.run();
|
||||
@ -932,7 +932,7 @@ fn update_precise_overrides_msrv_resolver() {
|
||||
.with_stderr_data(str![[r#"
|
||||
[UPDATING] `dummy-registry` index
|
||||
[LOCKING] 1 package to latest Rust 1.60.0 compatible version
|
||||
[ADDING] bar v1.5.0 (available: v1.6.0)
|
||||
[ADDING] bar v1.5.0 (available: v1.6.0, requires Rust 1.65.0)
|
||||
|
||||
"#]])
|
||||
.run();
|
||||
@ -1019,7 +1019,7 @@ foo v0.0.1 ([ROOT]/foo)
|
||||
.with_stderr_data(str![[r#"
|
||||
[UPDATING] `dummy-registry` index
|
||||
[LOCKING] 2 packages to latest Rust 1.60.0 compatible versions
|
||||
[ADDING] newer-and-older v1.5.0 (available: v1.6.0)
|
||||
[ADDING] newer-and-older v1.5.0 (available: v1.6.0, requires Rust 1.65.0)
|
||||
[ADDING] only-newer v1.6.0 (requires Rust 1.65.0)
|
||||
[DOWNLOADING] crates ...
|
||||
[DOWNLOADED] newer-and-older v1.5.0 (registry `dummy-registry`)
|
||||
|
Loading…
x
Reference in New Issue
Block a user