feat: less bad launches
This commit is contained in:
@ -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(())
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user