Skip to content

Commit ad4f647

Browse files
committed
refactor(update): Consolidate latest calculation
1 parent 0924f83 commit ad4f647

File tree

1 file changed

+16
-58
lines changed

1 file changed

+16
-58
lines changed

src/cargo/ops/cargo_update.rs

Lines changed: 16 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ use crate::core::{PackageId, PackageIdSpec, PackageIdSpecQuery};
77
use crate::core::{Resolve, SourceId, Workspace};
88
use crate::ops;
99
use crate::sources::source::QueryKind;
10+
use crate::sources::IndexSummary;
1011
use crate::util::cache_lock::CacheLockMode;
1112
use crate::util::context::GlobalContext;
1213
use crate::util::toml_mut::dependency::{MaybeWorkspace, Source};
@@ -512,17 +513,7 @@ fn print_lockfile_generation(
512513
};
513514

514515
for package in diff.added.iter() {
515-
let latest = if !possibilities.is_empty() {
516-
possibilities
517-
.iter()
518-
.map(|s| s.as_summary())
519-
.filter(|s| is_latest(s.version(), package.version()))
520-
.map(|s| s.version().clone())
521-
.max()
522-
.map(format_latest)
523-
} else {
524-
None
525-
};
516+
let latest = report_latest(&possibilities, *package);
526517

527518
if let Some(latest) = latest {
528519
ws.gctx().shell().status_with_color(
@@ -602,18 +593,7 @@ fn print_lockfile_sync(
602593
}
603594
} else {
604595
for package in diff.added.iter() {
605-
let latest = if !possibilities.is_empty() {
606-
possibilities
607-
.iter()
608-
.map(|s| s.as_summary())
609-
.filter(|s| is_latest(s.version(), package.version()))
610-
.map(|s| s.version().clone())
611-
.max()
612-
.map(format_latest)
613-
} else {
614-
None
615-
}
616-
.unwrap_or_default();
596+
let latest = report_latest(&possibilities, *package).unwrap_or_default();
617597

618598
ws.gctx().shell().status_with_color(
619599
"Adding",
@@ -656,18 +636,7 @@ fn print_lockfile_updates(
656636
};
657637

658638
if let Some((removed, added)) = diff.change() {
659-
let latest = if !possibilities.is_empty() {
660-
possibilities
661-
.iter()
662-
.map(|s| s.as_summary())
663-
.filter(|s| is_latest(s.version(), added.version()))
664-
.map(|s| s.version().clone())
665-
.max()
666-
.map(format_latest)
667-
} else {
668-
None
669-
}
670-
.unwrap_or_default();
639+
let latest = report_latest(&possibilities, *added).unwrap_or_default();
671640

672641
let msg = if removed.source_id().is_git() {
673642
format!(
@@ -700,18 +669,7 @@ fn print_lockfile_updates(
700669
)?;
701670
}
702671
for package in diff.added.iter() {
703-
let latest = if !possibilities.is_empty() {
704-
possibilities
705-
.iter()
706-
.map(|s| s.as_summary())
707-
.filter(|s| is_latest(s.version(), package.version()))
708-
.map(|s| s.version().clone())
709-
.max()
710-
.map(format_latest)
711-
} else {
712-
None
713-
}
714-
.unwrap_or_default();
672+
let latest = report_latest(&possibilities, *package).unwrap_or_default();
715673

716674
ws.gctx().shell().status_with_color(
717675
"Adding",
@@ -721,17 +679,7 @@ fn print_lockfile_updates(
721679
}
722680
}
723681
for package in &diff.unchanged {
724-
let latest = if !possibilities.is_empty() {
725-
possibilities
726-
.iter()
727-
.map(|s| s.as_summary())
728-
.filter(|s| is_latest(s.version(), package.version()))
729-
.map(|s| s.version().clone())
730-
.max()
731-
.map(format_latest)
732-
} else {
733-
None
734-
};
682+
let latest = report_latest(&possibilities, *package);
735683

736684
if let Some(latest) = latest {
737685
unchanged_behind += 1;
@@ -795,6 +743,16 @@ fn status_locking(ws: &Workspace<'_>, num_pkgs: usize) -> CargoResult<()> {
795743
Ok(())
796744
}
797745

746+
fn report_latest(possibilities: &[IndexSummary], package: PackageId) -> Option<String> {
747+
possibilities
748+
.iter()
749+
.map(|s| s.as_summary())
750+
.filter(|s| is_latest(s.version(), package.version()))
751+
.map(|s| s.version().clone())
752+
.max()
753+
.map(format_latest)
754+
}
755+
798756
fn format_latest(version: semver::Version) -> String {
799757
let warn = style::WARN;
800758
format!(" {warn}(latest: v{version}){warn:#}")

0 commit comments

Comments
 (0)