diff options
author | Galen Guyer <galen@galenguyer.com> | 2023-01-14 00:14:38 -0500 |
---|---|---|
committer | Galen Guyer <galen@galenguyer.com> | 2023-01-14 00:14:38 -0500 |
commit | 41766ce42a65e8d67e031bb941859149df6a61c1 (patch) | |
tree | c037cfd8a019ce26b14b46d2f775253e8e91e36c | |
parent | b8334a92350b4e20004cc9cd97f3ddfcc8d1dfe0 (diff) |
early exit if package already built
-rw-r--r-- | src/bin/build-pkg.rs | 120 | ||||
-rw-r--r-- | src/bin/create-chroot.rs | 2 | ||||
-rw-r--r-- | src/lib.rs | 4 |
3 files changed, 73 insertions, 53 deletions
diff --git a/src/bin/build-pkg.rs b/src/bin/build-pkg.rs index de8f7b2..40f67fe 100644 --- a/src/bin/build-pkg.rs +++ b/src/bin/build-pkg.rs @@ -1,4 +1,4 @@ -use std::process::{Child, Command, Output}; +use std::process::{Child, Command}; #[tokio::main] async fn main() { @@ -15,38 +15,81 @@ async fn main() { let package = package.expect("package is None"); let dependencies = package.resolve_dependencies(&handle, &package_list); - for dependency in dependencies.iter().filter(|d| match d { - pkgbuild::Dependency::AUR(_) => true, - _ => false, - }) { + for dependency in dependencies + .iter() + .filter(|d| matches!(d, pkgbuild::Dependency::AUR(_))) + { dbg!(dependency); } - let mut command = Command::new("mkdir"); - command.arg("-p").arg(format!( - "{}/pkgbuild/", - dirs::cache_dir().unwrap().to_str().unwrap() - )); + let pkg_dir = format!( + "{}/pkgbuild/{}", + dirs::cache_dir().unwrap().to_str().unwrap(), + package_name + ); + + if dbg!(std::path::Path::new(dbg!(&pkg_dir)).exists()) { + let mut command = Command::new("git"); + command.current_dir(&pkg_dir).arg("pull"); + dbg!(&command); + print_status(command.spawn()); + } else { + let mut command = Command::new("mkdir"); + command.arg("-p").arg(format!( + "{}/pkgbuild/", + dirs::cache_dir().unwrap().to_str().unwrap() + )); + dbg!(&command); + print_status(command.spawn()); + + let mut command = Command::new("git"); + command + .arg("clone") + .arg("--single-branch") + .arg("--branch") + .arg(&package_name) + .arg(format!( + "{}/aur.git", + dirs::home_dir().unwrap().to_str().unwrap() + )) + .arg(&pkg_dir); + dbg!(&command); + print_status(command.spawn()); + } + + let mut command = Command::new("makepkg"); + command + .current_dir(&pkg_dir) + .arg("--packagelist"); dbg!(&command); - print_status(command.spawn()); + let output = command.output().expect("Failed to execute command"); + let package_list = String::from_utf8(output.stdout) + .unwrap() + .trim() + .to_string() + .split_whitespace() + .map(String::from) + .collect::<Vec<String>>(); + println!("{:?}", package_list); + if package_list.iter().all(|p| dbg!(std::path::Path::new(dbg!(&p)).exists())) { + println!("{package_name} already built"); + return; + } - let mut command = Command::new("git"); + let mut command = Command::new("makepkg"); command - .arg("clone") - .arg("--single-branch") - .arg("--branch") - .arg(&package_name) - .arg(format!( - "{}/aur.git", - dirs::home_dir().unwrap().to_str().unwrap() - )) - .arg(format!( - "{}/pkgbuild/{}", - dirs::cache_dir().unwrap().to_str().unwrap(), - package_name - )); + .current_dir(&pkg_dir) + .arg("--packagelist"); dbg!(&command); - print_status(command.spawn()); + let output = command.output().expect("Failed to execute command"); + let package_list = String::from_utf8(output.stdout) + .unwrap() + .trim() + .to_string() + .split_whitespace() + .map(String::from) + .collect::<Vec<String>>(); + println!("{:?}", package_list); let chroot_dir = std::env::var("PKGBUILD_CHROOT_DIR") .unwrap_or_else(|_| String::from("/var/lib/pkgbuild")) @@ -55,11 +98,7 @@ async fn main() { let mut command = Command::new("makechrootpkg"); command - .current_dir(format!( - "{}/pkgbuild/{}", - dirs::cache_dir().unwrap().to_str().unwrap(), - package_name - )) + .current_dir(&pkg_dir) .arg("-l") .arg(&package_name) .arg("-r") @@ -68,25 +107,6 @@ async fn main() { .args(["--skippgpcheck", "--syncdeps"]); dbg!(&command); // print_status(command.spawn()); - - let mut command = Command::new("makepkg"); - command - .current_dir(format!( - "{}/pkgbuild/{}", - dirs::cache_dir().unwrap().to_str().unwrap(), - &package_name - )) - .arg("--packagelist"); - dbg!(&command); - let output = command.output().expect("Failed to execute command"); - let package_list = String::from_utf8(output.stdout) - .unwrap() - .trim() - .to_string() - .split_whitespace() - .map(|s| String::from(s)) - .collect::<Vec<String>>(); - println!("{:?}", package_list); } fn print_status(output: Result<Child, std::io::Error>) { diff --git a/src/bin/create-chroot.rs b/src/bin/create-chroot.rs index abbf982..6592202 100644 --- a/src/bin/create-chroot.rs +++ b/src/bin/create-chroot.rs @@ -1,4 +1,4 @@ -use std::process::{Child, Command, Output}; +use std::process::{Child, Command}; fn main() { let chroot_dir = std::env::var("PKGBUILD_CHROOT_DIR") @@ -72,7 +72,7 @@ pub fn setup_alpm() -> Alpm { } impl PackageMeta { - pub fn resolve_dependencies(&self, alpm: &Alpm, aur: &Vec<PackageMeta>) -> Vec<Dependency> { + pub fn resolve_dependencies(&self, alpm: &Alpm, aur: &[PackageMeta]) -> Vec<Dependency> { let mut dependencies = Vec::new(); if let Some(depends) = &self.depends { @@ -95,7 +95,7 @@ impl PackageMeta { } } -fn resolve_dep(dep: &str, alpm: &Alpm, aur: &Vec<PackageMeta>) -> Dependency { +fn resolve_dep(dep: &str, alpm: &Alpm, aur: &[PackageMeta]) -> Dependency { let dependency = alpm.syncdbs().find_satisfier(dep.to_string()); match dependency { Some(d) => Dependency::Official(d.name().to_string()), |