Compare commits

..

1 Commits

Author SHA1 Message Date
264b1c1e30 pkg install add sync pkgdata if package already installed 2026-09-15 06:42:56 +03:00

View File

@ -16,8 +16,11 @@ pub fn install(repo: &String, pkgname: &String) {
let pkg_dir = crate::commands::get_aeropkg_base().join(repo).join(pkgname);
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 }
if builded_pkg_md_path.exists() && same_inode(&builded_pkg_md_path, pkg_md_path) {
sync_pkgdata(repo, pkgname, &pkg_dir);
if !pkg_dir.join("disabled").exists() { link(repo, pkgname) }
return;
}
check_build_dependency(repo, pkg_md_path);
@ -37,11 +40,8 @@ pub fn install(repo: &String, pkgname: &String) {
}
};
config(repo, pkgname);
let pkgdata = crate::commands::get_aeropkg_var().join(repo).join(pkgname).join(".pkgdata");
if pkgdata.exists() {
let status = Command::new("cp").args(["-rPlf", &format!("{}/.", pkgdata.to_string_lossy()), &pkg_dir.to_string_lossy()]).status();
if let Err(e) = status { eprintln!("Warning: failed to copy .pkgdata for {}/{}: {}", repo, pkgname, e) }
}
sync_pkgdata(repo, pkgname, &pkg_dir);
if !pkg_dir.join("disabled").exists() { link(repo, pkgname) }
let full_env = &get_custom_env(repo, pkgname, pkg_md_path);
@ -49,6 +49,25 @@ pub fn install(repo: &String, pkgname: &String) {
shell::run_install_hook_script(full_env);
}
fn sync_pkgdata(repo: &String, pkgname: &String, pkg_dir: &Path) {
let pkgdata = crate::commands::get_aeropkg_var().join(repo).join(pkgname).join(".pkgdata");
if pkgdata.exists() {
let status = Command::new("cp")
.args(["-rPlf", &format!("{}/.", pkgdata.to_string_lossy()), &pkg_dir.to_string_lossy()])
.status();
if let Err(e) = status {
eprintln!("Warning: failed to copy .pkgdata for {}/{}: {}", repo, pkgname, e);
}
}
}
fn same_inode(a: &Path, b: &Path) -> bool {
match (fs::metadata(a), fs::metadata(b)) {
(Ok(ma), Ok(mb)) => ma.ino() == mb.ino(),
_ => false,
}
}
fn update_built_link(src: &std::path::Path, dest: &std::path::Path) {
let _ = fs::remove_file(dest);
if let Err(e) = fs::hard_link(src, dest) {