remove builds from db if pkg is deleted
fix apibuilder interval refreshes refreshing widgets not visible
This commit is contained in:
@ -1,9 +1,6 @@
|
||||
use crate::repo::repo::{remove_pkg, remove_version};
|
||||
use rocket::serde::json::Json;
|
||||
use rocket::serde::Deserialize;
|
||||
use rocket::{post, State};
|
||||
use rocket_okapi::okapi::schemars;
|
||||
use rocket_okapi::{openapi, JsonSchema};
|
||||
use rocket_okapi::openapi;
|
||||
use sea_orm::DatabaseConnection;
|
||||
|
||||
#[openapi(tag = "test")]
|
||||
|
@ -1,7 +1,7 @@
|
||||
use crate::aur::aur::download_pkgbuild;
|
||||
use crate::db::prelude::Packages;
|
||||
use crate::db::prelude::Versions;
|
||||
use crate::db::versions;
|
||||
use crate::db::prelude::{Builds, Packages};
|
||||
use crate::db::{builds, versions};
|
||||
use crate::pkgbuild::build::build_pkgbuild;
|
||||
use anyhow::anyhow;
|
||||
use sea_orm::{ColumnTrait, DatabaseConnection, EntityTrait, ModelTrait, QueryFilter};
|
||||
@ -39,6 +39,49 @@ pub async fn add_pkg(
|
||||
Ok(pkg_file_name)
|
||||
}
|
||||
|
||||
pub async fn remove_pkg(db: &DatabaseConnection, pkg_id: i32) -> anyhow::Result<()> {
|
||||
let pkg = Packages::find_by_id(pkg_id)
|
||||
.one(db)
|
||||
.await?
|
||||
.ok_or(anyhow!("id not found"))?;
|
||||
|
||||
fs::remove_dir_all(format!("./builds/{}", pkg.name))?;
|
||||
|
||||
let versions = Versions::find()
|
||||
.filter(versions::Column::PackageId.eq(pkg.id))
|
||||
.all(db)
|
||||
.await?;
|
||||
|
||||
for v in versions {
|
||||
rem_ver(db, v).await?;
|
||||
}
|
||||
|
||||
// remove corresponding builds
|
||||
let builds = Builds::find()
|
||||
.filter(builds::Column::PkgId.eq(pkg.id))
|
||||
.all(db)
|
||||
.await?;
|
||||
for b in builds {
|
||||
b.delete(db).await?;
|
||||
}
|
||||
|
||||
// remove package db entry
|
||||
pkg.delete(db).await?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub async fn remove_version(db: &DatabaseConnection, version_id: i32) -> anyhow::Result<()> {
|
||||
let version = Versions::find()
|
||||
.filter(versions::Column::PackageId.eq(version_id))
|
||||
.one(db)
|
||||
.await?;
|
||||
if let Some(version) = version {
|
||||
rem_ver(db, version).await?;
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn repo_add(pkg_file_name: String) -> anyhow::Result<()> {
|
||||
let db_file = format!("{REPO_NAME}.db.tar.gz");
|
||||
|
||||
@ -79,40 +122,6 @@ fn repo_remove(pkg_file_name: String) -> anyhow::Result<()> {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub async fn remove_pkg(db: &DatabaseConnection, pkg_id: i32) -> anyhow::Result<()> {
|
||||
let pkg = Packages::find_by_id(pkg_id)
|
||||
.one(db)
|
||||
.await?
|
||||
.ok_or(anyhow!("id not found"))?;
|
||||
|
||||
fs::remove_dir_all(format!("./builds/{}", pkg.name))?;
|
||||
|
||||
let versions = Versions::find()
|
||||
.filter(versions::Column::PackageId.eq(pkg.id))
|
||||
.all(db)
|
||||
.await?;
|
||||
|
||||
for v in versions {
|
||||
rem_ver(db, v).await?;
|
||||
}
|
||||
|
||||
// remove package db entry
|
||||
pkg.delete(db).await?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub async fn remove_version(db: &DatabaseConnection, version_id: i32) -> anyhow::Result<()> {
|
||||
let version = Versions::find()
|
||||
.filter(versions::Column::PackageId.eq(version_id))
|
||||
.one(db)
|
||||
.await?;
|
||||
if let Some(version) = version {
|
||||
rem_ver(db, version).await?;
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
async fn rem_ver(db: &DatabaseConnection, version: versions::Model) -> anyhow::Result<()> {
|
||||
if let Some(filename) = version.file_name.clone() {
|
||||
// so repo-remove only supports passing a package name and removing the whole package
|
||||
|
Reference in New Issue
Block a user