Skip to content

Commit 6469a3e

Browse files
committed
Auto merge of #14568 - epage:message, r=weihanglo
fix(resolve): Don't list transitive, incompatible dependencies as available ### What does this PR try to resolve? We have limited capability to clearly communicate to the user the different update states without overwhelming them. Before we showed all versions that were behind, with color distinguishing how actionable they are. Color doesn't communicate enough though and we don't want to add footnotes to clarify everything. For now, the least useful messages will be removed, available, transitive, incompatible versions. These only give the user a hint of tech debt within their dependencies and can't be acted upon. This is part of #13908 ### How should we test and review this PR? ### Additional information
2 parents e0dfa38 + fd743da commit 6469a3e

File tree

3 files changed

+45
-47
lines changed

3 files changed

+45
-47
lines changed

src/cargo/ops/cargo_update.rs

Lines changed: 43 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -774,7 +774,7 @@ fn report_latest(possibilities: &[IndexSummary], change: &PackageChange) -> Opti
774774
let version_req = package_id.version().to_caret_req();
775775
let required_rust_version = change.required_rust_version.as_ref();
776776

777-
if let Some(summary) = possibilities
777+
let compat_ver_compat_msrv_summary = possibilities
778778
.iter()
779779
.map(|s| s.as_summary())
780780
.filter(|s| {
@@ -787,45 +787,43 @@ fn report_latest(possibilities: &[IndexSummary], change: &PackageChange) -> Opti
787787
}
788788
})
789789
.filter(|s| package_id.version() != s.version() && version_req.matches(s.version()))
790-
.max_by_key(|s| s.version())
791-
{
790+
.max_by_key(|s| s.version());
791+
if let Some(summary) = compat_ver_compat_msrv_summary {
792792
let warn = style::WARN;
793793
let version = summary.version();
794794
let report = format!(" {warn}(available: v{version}){warn:#}");
795795
return Some(report);
796796
}
797797

798-
if let Some(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-
{
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

823-
if let Some(summary) = possibilities
821+
let compat_ver_summary = possibilities
824822
.iter()
825823
.map(|s| s.as_summary())
826824
.filter(|s| package_id.version() != s.version() && version_req.matches(s.version()))
827-
.max_by_key(|s| s.version())
828-
{
825+
.max_by_key(|s| s.version());
826+
if let Some(summary) = compat_ver_summary {
829827
let msrv_note = summary
830828
.rust_version()
831829
.map(|rv| format!(", requires Rust {rv}"))
@@ -836,20 +834,22 @@ fn report_latest(possibilities: &[IndexSummary], change: &PackageChange) -> Opti
836834
return Some(report);
837835
}
838836

839-
if let Some(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-
{
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)