mirror of
https://github.com/Start9Labs/start-os.git
synced 2026-03-30 12:11:56 +00:00
appmgr: initialize dependency errors on install
This commit is contained in:
@@ -136,7 +136,6 @@ impl DepInfo {
|
|||||||
dependency_config: Option<Config>, // fetch if none
|
dependency_config: Option<Config>, // fetch if none
|
||||||
dependent_id: &PackageId,
|
dependent_id: &PackageId,
|
||||||
dependent_version: &Version,
|
dependent_version: &Version,
|
||||||
dependent_config: &Config,
|
|
||||||
) -> Result<Result<(), DependencyError>, Error> {
|
) -> Result<Result<(), DependencyError>, Error> {
|
||||||
let dependency = crate::db::DatabaseModel::new()
|
let dependency = crate::db::DatabaseModel::new()
|
||||||
.package_data()
|
.package_data()
|
||||||
@@ -178,7 +177,7 @@ impl DepInfo {
|
|||||||
};
|
};
|
||||||
if let Some(cfg_req) = &self.config {
|
if let Some(cfg_req) = &self.config {
|
||||||
if let Err(e) = cfg_req
|
if let Err(e) = cfg_req
|
||||||
.check(dependent_id, dependent_version, dependent_config)
|
.check(dependent_id, dependent_version, &dependency_config)
|
||||||
.await
|
.await
|
||||||
{
|
{
|
||||||
if e.kind == crate::ErrorKind::ConfigRulesViolation {
|
if e.kind == crate::ErrorKind::ConfigRulesViolation {
|
||||||
|
|||||||
@@ -354,12 +354,25 @@ pub async fn install_s9pk<R: AsyncRead + AsyncSeek + Unpin>(
|
|||||||
log::info!("Install {}@{}: Complete", pkg_id, version);
|
log::info!("Install {}@{}: Complete", pkg_id, version);
|
||||||
|
|
||||||
let static_files = StaticFiles::local(pkg_id, version, manifest.assets.icon_type())?;
|
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 {
|
let installed = InstalledPackageDataEntry {
|
||||||
manifest: manifest.clone(),
|
manifest: manifest.clone(),
|
||||||
status: Status {
|
status: Status {
|
||||||
configured: manifest.config.is_none(),
|
configured: manifest.config.is_none(),
|
||||||
main: MainStatus::Stopped,
|
main: MainStatus::Stopped,
|
||||||
dependency_errors: todo!(),
|
dependency_errors: DependencyErrors::init(&mut tx, &manifest, ¤t_dependencies)
|
||||||
|
.await?,
|
||||||
},
|
},
|
||||||
system_pointers: Vec::new(),
|
system_pointers: Vec::new(),
|
||||||
current_dependents: {
|
current_dependents: {
|
||||||
@@ -386,18 +399,7 @@ pub async fn install_s9pk<R: AsyncRead + AsyncSeek + Unpin>(
|
|||||||
}
|
}
|
||||||
deps
|
deps
|
||||||
},
|
},
|
||||||
current_dependencies: manifest
|
current_dependencies,
|
||||||
.dependencies
|
|
||||||
.0
|
|
||||||
.iter()
|
|
||||||
.filter_map(|(id, info)| {
|
|
||||||
if info.optional.is_none() {
|
|
||||||
Some((id.clone(), CurrentDependencyInfo::default()))
|
|
||||||
} else {
|
|
||||||
None
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.collect(),
|
|
||||||
interface_info,
|
interface_info,
|
||||||
};
|
};
|
||||||
let mut pde = model.get_mut(&mut tx).await?;
|
let mut pde = model.get_mut(&mut tx).await?;
|
||||||
|
|||||||
@@ -415,6 +415,31 @@ impl HasModel for DependencyErrors {
|
|||||||
type Model = MapModel<Self>;
|
type Model = MapModel<Self>;
|
||||||
}
|
}
|
||||||
impl DependencyErrors {
|
impl DependencyErrors {
|
||||||
|
pub async fn init<Db: DbHandle>(
|
||||||
|
db: &mut Db,
|
||||||
|
manifest: &Manifest,
|
||||||
|
current_dependencies: &IndexMap<PackageId, CurrentDependencyInfo>,
|
||||||
|
) -> Result<DependencyErrors, Error> {
|
||||||
|
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(
|
async fn update_health_based(
|
||||||
&mut self,
|
&mut self,
|
||||||
dependencies: &IndexMap<PackageId, CurrentDependencyInfo>,
|
dependencies: &IndexMap<PackageId, CurrentDependencyInfo>,
|
||||||
|
|||||||
@@ -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(())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user