feat: less bad launches

This commit is contained in:
2025-02-23 23:48:00 +01:00
parent fcd3855c49
commit 70b8b3ae55
27 changed files with 145 additions and 34 deletions

View File

@ -1,4 +1,4 @@
use std::collections::HashMap;
use std::collections::{HashMap, HashSet};
use std::path::Path;
use anyhow::{Result, anyhow};
use serde::{Deserialize, Serialize};
@ -6,7 +6,7 @@ use tauri::{AppHandle, Emitter};
use tokio::fs;
use tokio::task::JoinSet;
use crate::model::rainy;
use crate::pkg::{Package, PkgKey};
use crate::pkg::{Package, PkgKey, Remote};
use crate::util;
use crate::download_handler::DownloadHandler;
@ -134,12 +134,14 @@ impl PackageStore {
pkg: key.to_owned()
})?;
let rmt = pkg.rmt.as_ref() //clone()
let rmt = pkg.rmt.as_ref()
.ok_or_else(|| anyhow!("Attempted to install a pkg without remote data"))?;
if install_deps {
for dep in &rmt.dependencies {
Box::pin(self.install_package(&dep, false, true)).await?;
let mut set = HashSet::new();
self.resolve_deps(rmt.clone(), &mut set)?;
for dep in set {
Box::pin(self.install_package(&dep, false, false)).await?;
}
}
@ -244,4 +246,18 @@ impl PackageStore {
Ok(())
}
fn resolve_deps(&self, rmt: Remote, set: &mut HashSet<PkgKey>) -> Result<()> {
for d in rmt.dependencies {
set.insert(d.clone());
let subrmt = self.store.get(&d)
.ok_or_else(|| anyhow!("Attempted to delete a nonexistent pkg"))?
.rmt
.clone()
.ok_or_else(|| anyhow!("Attempted to resolve deps without fetching"))?;
self.resolve_deps(subrmt, set)?;
}
Ok(())
}
}