Merge branch 'master' into 'master'

fix: install runtime dependencies of locally built packages

See merge request redox-os/installer!43
This commit is contained in:
Jeremy Soller
2024-12-06 17:36:23 +00:00
+25 -6
View File
@@ -20,7 +20,7 @@ use std::{
collections::BTreeMap,
env, fs,
io::{self, Seek, SeekFrom, Write},
path::Path,
path::{Path, PathBuf},
process,
rc::Rc,
sync::mpsc::channel,
@@ -78,13 +78,32 @@ fn prompt_password(prompt: &str, confirm_prompt: &str) -> Result<String> {
Ok(password.unwrap_or("".to_string()))
}
fn install_local_pkgar(cookbook: &str, target: &str, packagename: &str, dest: &str) {
fn install_local_pkgar(cookbook: &str, target: &str, packagename: &str, dest: &str) -> Result<()> {
let head_path = PathBuf::from(format!("{dest}/pkg/{packagename}.pkgar_head"));
// Check if the package has been already installed. Maybe it was a runtime dependency of some
// other package.
if head_path.exists() {
return Ok(());
}
let public_path = format!("{cookbook}/build/id_ed25519.pub.toml",);
let pkgar_path = format!("{cookbook}/repo/{target}/{packagename}.pkgar");
pkgar::extract(&public_path, &pkgar_path, dest).unwrap();
let head_path = format!("{dest}/pkg/{packagename}.pkgar_head");
pkgar::split(&public_path, &pkgar_path, &head_path, Option::<&str>::None).unwrap();
pkgar::extract(&public_path, &pkgar_path, dest).unwrap();
pkgar::split(&public_path, &pkgar_path, head_path, Option::<&str>::None).unwrap();
let pkginfo_path = format!("{cookbook}/repo/{target}/{packagename}.toml");
let pkginfo = pkg::Package::from_toml(&fs::read_to_string(pkginfo_path)?)?;
// Recursively install any runtime dependencies.
for dep in pkginfo.depends.iter() {
let depname = dep.as_str();
println!("Installing runtime dependency for {packagename} from local repo: {depname}");
install_local_pkgar(cookbook, target, depname, dest)?;
}
Ok(())
}
//TODO: error handling
@@ -129,7 +148,7 @@ fn install_packages(config: &Config, dest: &str, cookbook: Option<&str>) {
}
Rule::Build => {
println!("Installing package from local repo: {}", packagename);
install_local_pkgar(cookbook, target, packagename, dest);
install_local_pkgar(cookbook, target, packagename, dest).unwrap();
}
}
}