add option to get only part of output with startline

This commit is contained in:
lukas-heiligenbrunner 2023-12-26 22:20:40 +01:00
parent 406da5325f
commit 15b2fe7e29
3 changed files with 35 additions and 9 deletions

View File

@ -2,7 +2,7 @@ use crate::aur::aur::get_info_by_name;
use crate::builder::types::Action; use crate::builder::types::Action;
use crate::db::prelude::{Packages, Versions}; use crate::db::prelude::{Packages, Versions};
use crate::db::{packages, versions}; use crate::db::{packages, versions};
use rocket::response::status::NotFound; use rocket::response::status::BadRequest;
use rocket::serde::json::Json; use rocket::serde::json::Json;
use rocket::serde::Deserialize; use rocket::serde::Deserialize;
use rocket::{post, State}; use rocket::{post, State};
@ -25,14 +25,14 @@ pub async fn package_add(
db: &State<DatabaseConnection>, db: &State<DatabaseConnection>,
input: Json<AddBody>, input: Json<AddBody>,
tx: &State<Sender<Action>>, tx: &State<Sender<Action>>,
) -> Result<(), NotFound<String>> { ) -> Result<(), BadRequest<String>> {
let db = db as &DatabaseConnection; let db = db as &DatabaseConnection;
let pkt_model = match Packages::find() let pkt_model = match Packages::find()
.filter(packages::Column::Name.eq(input.name.clone())) .filter(packages::Column::Name.eq(input.name.clone()))
.one(db) .one(db)
.await .await
.map_err(|e| NotFound(e.to_string()))? .map_err(|e| BadRequest(Some(e.to_string())))?
{ {
None => { None => {
let new_package = packages::ActiveModel { let new_package = packages::ActiveModel {
@ -47,13 +47,13 @@ pub async fn package_add(
let pkg = get_info_by_name(input.name.clone().as_str()) let pkg = get_info_by_name(input.name.clone().as_str())
.await .await
.map_err(|_| NotFound("couldn't download package metadata".to_string()))?; .map_err(|_| BadRequest(Some("couldn't download package metadata".to_string())))?;
let version_model = match Versions::find() let version_model = match Versions::find()
.filter(versions::Column::Version.eq(pkg.version.clone())) .filter(versions::Column::Version.eq(pkg.version.clone()))
.one(db) .one(db)
.await .await
.map_err(|e| NotFound(e.to_string()))? .map_err(|e| BadRequest(Some(e.to_string())))?
{ {
None => { None => {
let new_version = versions::ActiveModel { let new_version = versions::ActiveModel {
@ -70,7 +70,7 @@ pub async fn package_add(
if input.force_build { if input.force_build {
p.into() p.into()
} else { } else {
return Err(NotFound("Version already existing".to_string())); return Err(BadRequest(Some("Version already existing".to_string())));
} }
} }
}; };

View File

@ -19,6 +19,6 @@ pub fn build_api() -> Vec<Route> {
package_del, package_del,
version_del, version_del,
build_output, build_output,
list_builds list_builds,
] ]
} }

View File

@ -69,10 +69,11 @@ pub async fn package_list(
} }
#[openapi(tag = "test")] #[openapi(tag = "test")]
#[get("/builds/output?<buildid>")] #[get("/builds/output?<buildid>&<startline>")]
pub async fn build_output( pub async fn build_output(
db: &State<DatabaseConnection>, db: &State<DatabaseConnection>,
buildid: i32, buildid: i32,
startline: Option<i32>,
) -> Result<String, NotFound<String>> { ) -> Result<String, NotFound<String>> {
let db = db as &DatabaseConnection; let db = db as &DatabaseConnection;
@ -82,7 +83,32 @@ pub async fn build_output(
.map_err(|e| NotFound(e.to_string()))? .map_err(|e| NotFound(e.to_string()))?
.ok_or(NotFound("couldn't find id".to_string()))?; .ok_or(NotFound("couldn't find id".to_string()))?;
build.ouput.ok_or(NotFound("No Output".to_string())) return match build.ouput {
None => Err(NotFound("No Output".to_string())),
Some(v) => match startline {
None => Ok(v),
Some(startline) => {
let output: Vec<String> = v.split("\n").map(|x| x.to_string()).collect();
let len = output.len();
let len_missing = len as i32 - startline;
let output = output
.iter()
.rev()
.take(if len_missing > 0 {
len_missing as usize
} else {
0
})
.rev()
.map(|x1| x1.clone())
.collect::<Vec<_>>();
let output = output.join("\n");
Ok(output)
}
},
};
} }
#[derive(FromQueryResult, Deserialize, JsonSchema, Serialize)] #[derive(FromQueryResult, Deserialize, JsonSchema, Serialize)]