From 87ce527c3065f3398e5d37550f144fb97fbff7cf Mon Sep 17 00:00:00 2001 From: Peter Allin Date: Sun, 29 Jan 2023 11:18:18 +0100 Subject: [PATCH] Avoid saving the same future_incompat warning multiple times Fixes #11594. --- src/cargo/core/compiler/future_incompat.rs | 26 +++++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/src/cargo/core/compiler/future_incompat.rs b/src/cargo/core/compiler/future_incompat.rs index 61b2c47fd87..3f829f938ec 100644 --- a/src/cargo/core/compiler/future_incompat.rs +++ b/src/cargo/core/compiler/future_incompat.rs @@ -100,18 +100,30 @@ impl Default for OnDiskReports { } impl OnDiskReports { - /// Saves a new report. + /// Saves a new report returning its id pub fn save_report( mut self, ws: &Workspace<'_>, suggestion_message: String, per_package_reports: &[FutureIncompatReportPackage], - ) { + ) -> u32 { + let per_package = render_report(per_package_reports); + + if let Some(existing_report) = self + .reports + .iter() + .find(|existing| existing.per_package == per_package) + { + return existing_report.id; + } + let report = OnDiskReport { id: self.next_id, suggestion_message, - per_package: render_report(per_package_reports), + per_package, }; + + let saved_id = report.id; self.next_id += 1; self.reports.push(report); if self.reports.len() > MAX_REPORTS { @@ -138,6 +150,8 @@ impl OnDiskReports { &mut ws.config().shell(), ); } + + saved_id } /// Loads the on-disk reports. @@ -450,7 +464,7 @@ https://doc.rust-lang.org/cargo/reference/overriding-dependencies.html#the-patch update_message = update_message, ); - current_reports.save_report( + let saved_report_id = current_reports.save_report( bcx.ws, suggestion_message.clone(), per_package_future_incompat_reports, @@ -461,14 +475,14 @@ https://doc.rust-lang.org/cargo/reference/overriding-dependencies.html#the-patch drop(bcx.config.shell().note(&format!( "this report can be shown with `cargo report \ future-incompatibilities --id {}`", - report_id + saved_report_id ))); } else if should_display_message { drop(bcx.config.shell().note(&format!( "to see what the problems were, use the option \ `--future-incompat-report`, or run `cargo report \ future-incompatibilities --id {}`", - report_id + saved_report_id ))); } }