aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGalen Guyer <galen@galenguyer.com>2023-01-14 00:14:38 -0500
committerGalen Guyer <galen@galenguyer.com>2023-01-14 00:14:38 -0500
commit41766ce42a65e8d67e031bb941859149df6a61c1 (patch)
treec037cfd8a019ce26b14b46d2f775253e8e91e36c
parentb8334a92350b4e20004cc9cd97f3ddfcc8d1dfe0 (diff)
early exit if package already built
-rw-r--r--src/bin/build-pkg.rs120
-rw-r--r--src/bin/create-chroot.rs2
-rw-r--r--src/lib.rs4
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")
diff --git a/src/lib.rs b/src/lib.rs
index 82e4775..91814f0 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -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()),