Skip to content

Commit fd743da

Browse files
committed
fix(resolve): Don't list transitive, incompatible dependencies as available
This is part of #13908
1 parent 2107a43 commit fd743da

File tree

3 files changed

+39
-41
lines changed

3 files changed

+39
-41
lines changed

src/cargo/ops/cargo_update.rs

Lines changed: 37 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -795,29 +795,27 @@ fn report_latest(possibilities: &[IndexSummary], change: &PackageChange) -> Opti
795795
return Some(report);
796796
}
797797

798-
let incompat_ver_compat_msrv_summary = possibilities
799-
.iter()
800-
.map(|s| s.as_summary())
801-
.filter(|s| {
802-
if let (Some(summary_rust_version), Some(required_rust_version)) =
803-
(s.rust_version(), required_rust_version)
804-
{
805-
summary_rust_version.is_compatible_with(required_rust_version)
806-
} else {
807-
true
808-
}
809-
})
810-
.filter(|s| is_latest(s.version(), package_id.version()))
811-
.max_by_key(|s| s.version());
812-
if let Some(summary) = incompat_ver_compat_msrv_summary {
813-
let warn = if change.is_transitive.unwrap_or(true) {
814-
Default::default()
815-
} else {
816-
style::WARN
817-
};
818-
let version = summary.version();
819-
let report = format!(" {warn}(available: v{version}){warn:#}");
820-
return Some(report);
798+
if !change.is_transitive.unwrap_or(true) {
799+
let incompat_ver_compat_msrv_summary = possibilities
800+
.iter()
801+
.map(|s| s.as_summary())
802+
.filter(|s| {
803+
if let (Some(summary_rust_version), Some(required_rust_version)) =
804+
(s.rust_version(), required_rust_version)
805+
{
806+
summary_rust_version.is_compatible_with(required_rust_version)
807+
} else {
808+
true
809+
}
810+
})
811+
.filter(|s| is_latest(s.version(), package_id.version()))
812+
.max_by_key(|s| s.version());
813+
if let Some(summary) = incompat_ver_compat_msrv_summary {
814+
let warn = style::WARN;
815+
let version = summary.version();
816+
let report = format!(" {warn}(available: v{version}){warn:#}");
817+
return Some(report);
818+
}
821819
}
822820

823821
let compat_ver_summary = possibilities
@@ -836,20 +834,22 @@ fn report_latest(possibilities: &[IndexSummary], change: &PackageChange) -> Opti
836834
return Some(report);
837835
}
838836

839-
let incompat_ver_summary = possibilities
840-
.iter()
841-
.map(|s| s.as_summary())
842-
.filter(|s| is_latest(s.version(), package_id.version()))
843-
.max_by_key(|s| s.version());
844-
if let Some(summary) = incompat_ver_summary {
845-
let msrv_note = summary
846-
.rust_version()
847-
.map(|rv| format!(", requires Rust {rv}"))
848-
.unwrap_or_default();
849-
let warn = style::NOP;
850-
let version = summary.version();
851-
let report = format!(" {warn}(available: v{version}{msrv_note}){warn:#}");
852-
return Some(report);
837+
if !change.is_transitive.unwrap_or(true) {
838+
let incompat_ver_summary = possibilities
839+
.iter()
840+
.map(|s| s.as_summary())
841+
.filter(|s| is_latest(s.version(), package_id.version()))
842+
.max_by_key(|s| s.version());
843+
if let Some(summary) = incompat_ver_summary {
844+
let msrv_note = summary
845+
.rust_version()
846+
.map(|rv| format!(", requires Rust {rv}"))
847+
.unwrap_or_default();
848+
let warn = style::NOP;
849+
let version = summary.version();
850+
let report = format!(" {warn}(available: v{version}{msrv_note}){warn:#}");
851+
return Some(report);
852+
}
853853
}
854854

855855
None

tests/testsuite/paths.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,6 @@ fn broken_path_override_warns() {
6060
.with_stderr_data(str![[r#"
6161
[UPDATING] `dummy-registry` index
6262
[LOCKING] 2 packages to latest compatible versions
63-
[ADDING] bar v0.1.0 (available: v0.2.0)
6463
[WARNING] path override for crate `a` has altered the original list of
6564
dependencies; the dependency on `bar` was either added or
6665
modified to not match the previously resolved version

tests/testsuite/update.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -406,7 +406,6 @@ fn update_precise() {
406406
.with_stderr_data(str![[r#"
407407
[UPDATING] `dummy-registry` index
408408
[DOWNGRADING] serde v0.2.1 -> v0.2.0
409-
[NOTE] pass `--verbose` to see 1 unchanged dependencies behind latest
410409
411410
"#]])
412411
.run();
@@ -2183,7 +2182,7 @@ fn update_breaking_specific_packages_that_wont_update() {
21832182
[UPDATING] non-semver v1.0.0 -> v1.0.1 (available: v2.0.0)
21842183
[UPDATING] renamed-from v1.0.0 -> v1.0.1 (available: v2.0.0)
21852184
[UPDATING] transitive-compatible v1.0.0 -> v1.0.1
2186-
[UPDATING] transitive-incompatible v1.0.0 -> v1.0.1 (available: v2.0.0)
2185+
[UPDATING] transitive-incompatible v1.0.0 -> v1.0.1
21872186
21882187
"#]])
21892188
.run();
@@ -2397,7 +2396,7 @@ fn update_breaking_spec_version_transitive() {
23972396
.with_stderr_data(str![[r#"
23982397
[UPDATING] `[..]` index
23992398
[LOCKING] 1 package to latest compatible version
2400-
[UPDATING] dep v1.1.0 -> v1.1.1 (available: v2.0.0)
2399+
[UPDATING] dep v1.1.0 -> v1.1.1
24012400
24022401
"#]])
24032402
.run();

0 commit comments

Comments
 (0)