From f8f64e8d6e049e8dcc7de3c222fbac1eadc315f9 Mon Sep 17 00:00:00 2001 From: Keagan McClelland Date: Fri, 17 Sep 2021 10:39:34 -0600 Subject: [PATCH] fixes self-dependency bug (#486) * fixes self-dependency bug * fixes build errors, hopefully memory usage isn't garbage * reduces allocations * spurious import --- appmgr/src/status/mod.rs | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/appmgr/src/status/mod.rs b/appmgr/src/status/mod.rs index e57a49137..b56242166 100644 --- a/appmgr/src/status/mod.rs +++ b/appmgr/src/status/mod.rs @@ -1,4 +1,4 @@ -use std::collections::HashMap; +use std::collections::{HashMap, HashSet}; use std::sync::Arc; use anyhow::anyhow; @@ -100,13 +100,33 @@ pub async fn check_all(ctx: &RpcContext) -> Result<(), Error> { })?; model.lock(&mut db, LockType::Write).await; if let Some(installed) = model.installed().check(&mut db).await? { + let listed_deps = installed + .clone() + .manifest() + .dependencies() + .get(&mut db, false) + .await? + .to_owned() + .0 + .into_iter() + .map(|x| x.0) + .collect::>(); status_manifest.push(( installed.clone().status(), Arc::new(installed.clone().manifest().get(&mut db, true).await?), )); status_deps.push(( installed.clone().status(), - Arc::new(installed.current_dependencies().get(&mut db, true).await?), + Arc::new({ + installed + .current_dependencies() + .get(&mut db, true) + .await? + .to_owned() + .into_iter() + .filter(|(id, _)| listed_deps.contains(id)) + .collect::>() + }), )); } } @@ -160,7 +180,7 @@ pub async fn check_all(ctx: &RpcContext) -> Result<(), Error> { async fn dependency_status( statuses: Arc>, status_model: StatusModel, - current_deps: Arc>>, + current_deps: Arc>, mut db: Db, ) -> Result<(), Error> { let mut status = status_model.get_mut(&mut db).await?;