From f6af87dc2758cb86a7ed3f9964120015ff7c948b Mon Sep 17 00:00:00 2001 From: lukas-heiligenbrunner Date: Tue, 27 Feb 2024 22:02:47 +0100 Subject: [PATCH] outsource cancel to method and handle errors --- backend/src/api/backend.rs | 3 +- backend/src/api/build.rs | 2 +- backend/src/aur/aur.rs | 6 +++- backend/src/builder/builder.rs | 54 ++++++++++++++++++---------------- backend/src/repo/repo.rs | 3 +- 5 files changed, 38 insertions(+), 30 deletions(-) diff --git a/backend/src/api/backend.rs b/backend/src/api/backend.rs index 70b0be5..4c8696d 100644 --- a/backend/src/api/backend.rs +++ b/backend/src/api/backend.rs @@ -19,6 +19,7 @@ pub fn build_api() -> Vec { stats, get_build, get_package, - package_update_endpoint + package_update_endpoint, + cancel_build ] } diff --git a/backend/src/api/build.rs b/backend/src/api/build.rs index 5185a16..5300cc7 100644 --- a/backend/src/api/build.rs +++ b/backend/src/api/build.rs @@ -147,7 +147,7 @@ pub async fn delete_build( #[openapi(tag = "build")] #[post("/build//cancel")] -pub async fn cancle_build( +pub async fn cancel_build( db: &State, tx: &State>, buildid: i32, diff --git a/backend/src/aur/aur.rs b/backend/src/aur/aur.rs index eeb248a..e62f8fb 100644 --- a/backend/src/aur/aur.rs +++ b/backend/src/aur/aur.rs @@ -43,7 +43,7 @@ pub async fn get_info_by_name(pkg_name: &str) -> anyhow::Result { Ok(response) } -pub async fn download_pkgbuild(url: &str, dest_dir: &str) -> anyhow::Result { +pub async fn download_pkgbuild(url: &str, dest_dir: &str, clear_build_dir: bool) -> anyhow::Result { let (file_data, file_name) = match download_file(url).await { Ok(data) => data, Err(e) => { @@ -51,6 +51,10 @@ pub async fn download_pkgbuild(url: &str, dest_dir: &str) -> anyhow::Result) { .await; } Action::Cancel(build_id) => { - let build = Builds::find_by_id(build_id) - .one(&db) - .await - .expect("TODO: panic message") - .expect("TODO: panic message"); - - let mut build: builds::ActiveModel = build.into(); - build.status = Set(Some(4)); - build.end_time = Set(Some( - SystemTime::now() - .duration_since(UNIX_EPOCH) - .unwrap() - .as_secs() as u32, - )); - let _ = build.clone().update(&db).await; - - job_handles - .lock() - .await - .remove(&build.id.clone().unwrap()) - .expect("TODO: panic message") - .abort(); + let _ = cancel_build(build_id, job_handles.clone(), db.clone()).await; } } } } } +async fn cancel_build(build_id: i32, job_handles: Arc>>>, db: DatabaseConnection) -> anyhow::Result<()> { + let build = Builds::find_by_id(build_id) + .one(&db) + .await? + .ok_or(anyhow!("No build found"))?; + + let mut build: builds::ActiveModel = build.into(); + build.status = Set(Some(4)); + build.end_time = Set(Some( + SystemTime::now() + .duration_since(UNIX_EPOCH) + .unwrap() + .as_secs() as u32, + )); + let _ = build.clone().update(&db).await; + + job_handles + .lock() + .await + .remove(&build.id.clone().unwrap()) + .ok_or(anyhow!("No build found"))? + .abort(); + Ok(()) +} + async fn queue_package( name: String, version: String, @@ -76,7 +79,6 @@ async fn queue_package( job_handles: Arc>>>, ) -> anyhow::Result<()> { let permits = Arc::clone(&semaphore); - let mut job_handles = Arc::clone(&job_handles); let build_id = build_model.id.clone().unwrap(); // spawn new thread for each pkg build @@ -116,7 +118,7 @@ async fn build_package( pkg.status = Set(0); pkg = pkg.update(&db).await?.into(); - match add_pkg(url, version, name, tx).await { + match add_pkg(url, version, name, tx, false).await { Ok(pkg_file_name) => { println!("successfully built package"); // update package success status diff --git a/backend/src/repo/repo.rs b/backend/src/repo/repo.rs index f822966..a5ec7d1 100644 --- a/backend/src/repo/repo.rs +++ b/backend/src/repo/repo.rs @@ -20,8 +20,9 @@ pub async fn add_pkg( version: String, name: String, tx: Sender, + clear_build_dir: bool, ) -> anyhow::Result { - let fname = download_pkgbuild(format!("{}{}", BASEURL, url).as_str(), "./builds").await?; + let fname = download_pkgbuild(format!("{}{}", BASEURL, url).as_str(), "./builds", clear_build_dir).await?; let pkg_file_names = build_pkgbuild( format!("./builds/{fname}"), version.as_str(),