Compare commits
1 Commits
ca7be6a025
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| 264b1c1e30 |
@ -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_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 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");
|
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);
|
check_build_dependency(repo, pkg_md_path);
|
||||||
@ -37,11 +40,8 @@ pub fn install(repo: &String, pkgname: &String) {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
config(repo, pkgname);
|
config(repo, pkgname);
|
||||||
let pkgdata = crate::commands::get_aeropkg_var().join(repo).join(pkgname).join(".pkgdata");
|
|
||||||
if pkgdata.exists() {
|
sync_pkgdata(repo, pkgname, &pkg_dir);
|
||||||
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) }
|
|
||||||
}
|
|
||||||
|
|
||||||
if !pkg_dir.join("disabled").exists() { link(repo, pkgname) }
|
if !pkg_dir.join("disabled").exists() { link(repo, pkgname) }
|
||||||
let full_env = &get_custom_env(repo, pkgname, pkg_md_path);
|
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);
|
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) {
|
fn update_built_link(src: &std::path::Path, dest: &std::path::Path) {
|
||||||
let _ = fs::remove_file(dest);
|
let _ = fs::remove_file(dest);
|
||||||
if let Err(e) = fs::hard_link(src, dest) {
|
if let Err(e) = fs::hard_link(src, dest) {
|
||||||
|
|||||||
Reference in New Issue
Block a user