Files
AeroPkg/src/commands/install.rs

65 lines
1.9 KiB
Rust

use std::path::Path;
use std::fs;
use std::os::unix::fs::MetadataExt;
use crate::utils::parser::{self, pkginfo};
use super::run::download::download;
use super::run::patch::patch;
use super::run::build::build;
use super::run::config::config;
pub fn install(repo: &String, pkgname: &String) {
let pkg_md_path = &crate::commands::get_aeropkg_var().join(format!("{}/{}.md", repo, pkgname));
let builded_pkg_md_path = crate::commands::get_aeropkg_base().join(repo).join(pkgname).join("build-script.md");
if builded_pkg_md_path.exists() {
if fs::metadata(builded_pkg_md_path).unwrap().ino() == fs::metadata(pkg_md_path).unwrap().ino() { return }
}
check_build_dependency(repo, pkg_md_path);
check_run_dependency(pkg_md_path);
download(repo, pkgname);
patch(repo, pkgname);
build(repo, pkgname);
config(repo, pkgname);
}
fn check_build_dependency(repo: &String, pkg_md_path: &Path) {
let deps = match parser::get_build_deps(pkg_md_path) {
Ok(deps) => deps,
Err(_) => { return }
};
for dependency in deps.lines() {
if !dependency.trim().is_empty() {
if !super::get_aeropkg_base().join(repo).join(dependency).exists() {
install(repo, &dependency.to_string())
}
}
}
}
fn check_run_dependency(pkg_md_path: &Path) {
let deps = match parser::get_run_deps(pkg_md_path) {
Ok(deps) => deps,
Err(_) => { return }
};
let repo_list = &parser::repoinfo::get_repo_list();
for pkgname in deps.split_whitespace() {
let mut found = false;
for repo_name in repo_list {
let path = super::get_aeropkg_base().join(repo_name).join(pkgname);
if path.exists() {
found = true; break
}
}
if !found {
install(&pkginfo::get_priority_repo(&pkgname.to_string()), &pkgname.to_string())
}
}
}