Files
AeroPkg/src/commands/install.rs

71 lines
1.9 KiB
Rust
Raw Normal View History

2025-11-18 19:46:36 +03:00
use std::path::Path;
2025-06-02 18:00:32 +03:00
use std::process;
2025-11-18 19:46:36 +03:00
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;
2025-08-08 00:00:14 +03:00
2025-06-02 18:00:32 +03:00
pub fn install(repo: &String, pkgname: &String) -> Result<(), bool> {
2025-11-18 19:46:36 +03:00
let pkg_md_path = crate::commands::get_var_path().join(format!("{}/{}.md", &repo, &pkgname));
2025-08-31 16:30:55 +03:00
2025-08-23 07:04:59 +03:00
check_build_dependency(&repo, &pkg_md_path)?;
check_run_dependency(&pkg_md_path)?;
2025-11-18 19:46:36 +03:00
download(&repo, &pkgname)?;
patch(&repo, &pkgname)?;
build(&repo, &pkgname)?;
config(&repo, &pkgname)?;
2025-08-08 00:00:14 +03:00
println!("Package {} installed successfully from repo {}", pkgname, repo);
Ok(())
}
2025-08-23 07:04:59 +03:00
fn check_build_dependency(repo: &String, pkg_md_path: &Path) -> Result<(), bool> {
let deps = match parser::get_build_deps(&pkg_md_path) {
2025-06-02 18:00:32 +03:00
Ok(deps) => deps,
2025-08-26 04:41:14 +03:00
Err(_) => { return Ok(()) }
2025-06-02 18:00:32 +03:00
};
for dependency in deps.lines() {
2025-08-08 00:00:14 +03:00
if !dependency.trim().is_empty() {
2025-11-18 19:46:36 +03:00
if !super::get_aeropkg_base().join(repo).join(dependency).exists() {
2025-06-02 18:00:32 +03:00
match install(repo, &dependency.to_string()) {
Ok(()) => {}
Err(_) => {process::exit(1) }
}
}
}
}
2025-08-08 00:00:14 +03:00
Ok(())
}
2025-06-02 18:00:32 +03:00
2025-08-23 07:04:59 +03:00
fn check_run_dependency(pkg_md_path: &Path) -> Result<(), bool> {
let deps = match parser::get_run_deps(pkg_md_path) {
Ok(deps) => deps,
2025-08-26 04:41:14 +03:00
Err(_) => { return Ok(()) }
2025-08-23 07:04:59 +03:00
};
2025-11-18 19:46:36 +03:00
let repo_list = parser::repoinfo::get_repo_list();
for pkgname in deps.split_whitespace() {
2025-08-23 07:04:59 +03:00
let mut found = false;
for repo_name in &repo_list {
2025-11-18 19:46:36 +03:00
let path = super::get_aeropkg_base().join(repo_name).join(pkgname);
if path.exists() {
2025-08-23 07:04:59 +03:00
found = true;
break;
}
}
if !found {
2025-11-18 19:46:36 +03:00
install(&pkginfo::get_priority_repo(pkgname.to_string()), &pkgname.to_string());
2025-08-08 00:00:14 +03:00
}
2025-06-02 18:00:32 +03:00
}
Ok(())
}