From 8fba85277a6e7d0ec1530e9543a79320794242ef Mon Sep 17 00:00:00 2001 From: Aiden McClelland Date: Mon, 14 Jun 2021 14:10:44 -0600 Subject: [PATCH] appmgr: initialize dependency errors on install --- appmgr/src/dependencies.rs | 3 +-- appmgr/src/install/mod.rs | 28 +++++++++++++++------------- appmgr/src/status/mod.rs | 25 +++++++++++++++++++++++++ appmgr/src/version/v0_2_13.rs | 21 --------------------- 4 files changed, 41 insertions(+), 36 deletions(-) delete mode 100644 appmgr/src/version/v0_2_13.rs diff --git a/appmgr/src/dependencies.rs b/appmgr/src/dependencies.rs index 001f5d788..93e21ca2d 100644 --- a/appmgr/src/dependencies.rs +++ b/appmgr/src/dependencies.rs @@ -136,7 +136,6 @@ impl DepInfo { dependency_config: Option, // fetch if none dependent_id: &PackageId, dependent_version: &Version, - dependent_config: &Config, ) -> Result, Error> { let dependency = crate::db::DatabaseModel::new() .package_data() @@ -178,7 +177,7 @@ impl DepInfo { }; if let Some(cfg_req) = &self.config { if let Err(e) = cfg_req - .check(dependent_id, dependent_version, dependent_config) + .check(dependent_id, dependent_version, &dependency_config) .await { if e.kind == crate::ErrorKind::ConfigRulesViolation { diff --git a/appmgr/src/install/mod.rs b/appmgr/src/install/mod.rs index c8bcffd33..5ddd6b7fe 100644 --- a/appmgr/src/install/mod.rs +++ b/appmgr/src/install/mod.rs @@ -354,12 +354,25 @@ pub async fn install_s9pk( log::info!("Install {}@{}: Complete", pkg_id, version); let static_files = StaticFiles::local(pkg_id, version, manifest.assets.icon_type())?; + let current_dependencies = manifest + .dependencies + .0 + .iter() + .filter_map(|(id, info)| { + if info.optional.is_none() { + Some((id.clone(), CurrentDependencyInfo::default())) + } else { + None + } + }) + .collect(); let installed = InstalledPackageDataEntry { manifest: manifest.clone(), status: Status { configured: manifest.config.is_none(), main: MainStatus::Stopped, - dependency_errors: todo!(), + dependency_errors: DependencyErrors::init(&mut tx, &manifest, ¤t_dependencies) + .await?, }, system_pointers: Vec::new(), current_dependents: { @@ -386,18 +399,7 @@ pub async fn install_s9pk( } deps }, - current_dependencies: manifest - .dependencies - .0 - .iter() - .filter_map(|(id, info)| { - if info.optional.is_none() { - Some((id.clone(), CurrentDependencyInfo::default())) - } else { - None - } - }) - .collect(), + current_dependencies, interface_info, }; let mut pde = model.get_mut(&mut tx).await?; diff --git a/appmgr/src/status/mod.rs b/appmgr/src/status/mod.rs index 1a5d0ea35..0892ab375 100644 --- a/appmgr/src/status/mod.rs +++ b/appmgr/src/status/mod.rs @@ -415,6 +415,31 @@ impl HasModel for DependencyErrors { type Model = MapModel; } impl DependencyErrors { + pub async fn init( + db: &mut Db, + manifest: &Manifest, + current_dependencies: &IndexMap, + ) -> Result { + let mut res = IndexMap::new(); + for (dep_id, info) in current_dependencies { + if let Err(e) = manifest + .dependencies + .0 + .get(dep_id) + .ok_or_else(|| { + Error::new( + anyhow!("current dependency not in manifest"), + crate::ErrorKind::Dependency, + ) + })? + .satisfied(db, dep_id, None, &manifest.id, &manifest.version) + .await? + { + res.insert(dep_id.clone(), e); + } + } + Ok(DependencyErrors(res)) + } async fn update_health_based( &mut self, dependencies: &IndexMap, diff --git a/appmgr/src/version/v0_2_13.rs b/appmgr/src/version/v0_2_13.rs deleted file mode 100644 index 40468b088..000000000 --- a/appmgr/src/version/v0_2_13.rs +++ /dev/null @@ -1,21 +0,0 @@ -use super::*; - -const V0_2_13: emver::Version = emver::Version::new(0, 2, 13, 0); - -pub struct Version; -#[async_trait] -impl VersionT for Version { - type Previous = v0_2_12::Version; - fn new() -> Self { - Version - } - fn semver(&self) -> &'static emver::Version { - &V0_2_13 - } - async fn up(&self) -> Result<(), Error> { - Ok(()) - } - async fn down(&self) -> Result<(), Error> { - Ok(()) - } -}