From 2b10d635b5feb66128a9eee649102f78d7132a22 Mon Sep 17 00:00:00 2001 From: ripytide Date: Sun, 15 Dec 2024 13:46:19 +0000 Subject: [PATCH] add missing method to trait and core --- src/backends/mod.rs | 2 ++ src/core.rs | 12 ++++++++---- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/backends/mod.rs b/src/backends/mod.rs index f60284d..a4b0d43 100644 --- a/src/backends/mod.rs +++ b/src/backends/mod.rs @@ -66,4 +66,6 @@ pub trait Backend { fn clean_cache(config: &Config) -> Result<()>; fn version(config: &Config) -> Result; + + fn missing(managed: Self::InstallOptions, installed: Option) -> Option; } diff --git a/src/core.rs b/src/core.rs index 05c356f..b303aa8 100644 --- a/src/core.rs +++ b/src/core.rs @@ -222,15 +222,19 @@ fn unmanaged(managed: &InstallOptions, config: &Config) -> Result { .map(|x| x.to_package_ids().difference(&managed.to_package_ids())) } fn missing(managed: &InstallOptions, config: &Config) -> Result { - let installed = QueryInfos::query_installed_packages(config)?.to_package_ids(); + let installed = QueryInfos::query_installed_packages(config)?; - let mut missing = managed.clone(); + let mut missing = InstallOptions::default(); macro_rules! x { ($(($upper_backend:ident, $lower_backend:ident)),*) => { $( - for package in installed.$lower_backend { - missing.$lower_backend.remove(&package); + for (package_id, managed_install_options) in managed.$lower_backend.iter() { + if let Some(missing_install_options) = + $upper_backend::missing(managed_install_options.clone(), installed.$lower_backend.get(package_id).cloned()) + { + missing.$lower_backend.insert(package_id.clone(), missing_install_options); + } } )* };