diff --git a/oma-pm/src/apt.rs b/oma-pm/src/apt.rs index 51a82257..975433f8 100644 --- a/oma-pm/src/apt.rs +++ b/oma-pm/src/apt.rs @@ -842,8 +842,8 @@ impl OmaApt { let mut autoremovable = (0, 0); let changes = self.cache.get_changes(sort == SummarySort::Names); - let mut suggest = vec![]; - let mut recommend = vec![]; + let mut suggest = HashSet::with_hasher(ahash::RandomState::new()); + let mut recommend = HashSet::with_hasher(ahash::RandomState::new()); for pkg in changes { if pkg.marked_new_install() { @@ -1092,8 +1092,8 @@ impl OmaApt { disk_size_delta, total_download_size, autoremovable, - suggest, - recommend, + suggest: suggest.into_iter().collect(), + recommend: recommend.into_iter().collect(), }) } @@ -1186,8 +1186,8 @@ fn get_package_url(cand: &Version<'_>) -> Vec { fn collect_recommends_and_suggests( cache: &Cache, - suggest: &mut Vec<(String, String)>, - recommend: &mut Vec<(String, String)>, + suggest: &mut HashSet<(String, String)>, + recommend: &mut HashSet<(String, String)>, version: &Version<'_>, ) { if let Some(s) = version.depends_map().get(&oma_apt::DepType::Suggests) { @@ -1201,7 +1201,7 @@ fn collect_recommends_and_suggests( fn collect_suggest( cache: &Cache, - suggest: &mut Vec<(String, String)>, + suggest: &mut HashSet<(String, String)>, packages: &[Dependency<'_>], ) { for deps in OmaDependency::map_deps(packages).inner() { @@ -1223,7 +1223,7 @@ fn collect_suggest( continue; }; - suggest.push((pkg.fullname(true), desc)); + suggest.insert((pkg.fullname(true), desc)); } } else { let pkgs = deps @@ -1232,9 +1232,11 @@ fn collect_suggest( .flat_map(|pkg| cache.get(pkg)) .collect::>(); - let all_not_marked_install = pkgs.iter().all(|pkg| !pkg.marked_install()); + let all_not_marked_install_and_is_installed = pkgs + .iter() + .all(|pkg| !pkg.marked_install() && !pkg.is_installed()); - if all_not_marked_install { + if all_not_marked_install_and_is_installed { for pkg in pkgs { let Some(cand) = pkg.candidate() else { continue; @@ -1244,7 +1246,7 @@ fn collect_suggest( continue; }; - suggest.push((pkg.fullname(true), desc)); + suggest.insert((pkg.fullname(true), desc)); } } } @@ -1279,8 +1281,8 @@ fn pkg_delta( new_pkg: &Package, op: InstallOperation, cache: &Cache, - suggest: &mut Vec<(String, String)>, - recommend: &mut Vec<(String, String)>, + suggest: &mut HashSet<(String, String)>, + recommend: &mut HashSet<(String, String)>, ) -> OmaAptResult { let cand = new_pkg .candidate()