mirror of
https://github.com/Noratrieb/cargo-bisect-rustc-service.git
synced 2026-01-15 16:45:02 +01:00
works?
This commit is contained in:
parent
e78b5becde
commit
b36cab3491
6 changed files with 248 additions and 63 deletions
68
src/db.rs
68
src/db.rs
|
|
@ -1,6 +1,7 @@
|
|||
use color_eyre::eyre::Context;
|
||||
use rusqlite::Connection;
|
||||
use tracing::info;
|
||||
use uuid::Uuid;
|
||||
|
||||
use crate::bisect::{BisectStatus, Bisection};
|
||||
|
||||
|
|
@ -21,13 +22,39 @@ pub fn setup(conn: &Connection) -> color_eyre::Result<()> {
|
|||
Ok(())
|
||||
}
|
||||
|
||||
pub fn add_bisection(conn: &Connection) -> color_eyre::Result<()> {
|
||||
Ok(())
|
||||
fn status_to_sql(status: &BisectStatus) -> (u8, Option<&str>) {
|
||||
match status {
|
||||
BisectStatus::InProgress => (0, None),
|
||||
BisectStatus::Error { output } => (1, Some(&output)),
|
||||
BisectStatus::Success { output } => (2, Some(&output)),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn add_bisection(conn: &Connection, bisect: &Bisection) -> color_eyre::Result<()> {
|
||||
let (status, stdout_stderr) = status_to_sql(&bisect.status);
|
||||
|
||||
conn.execute(
|
||||
"INSERT INTO bisect (job_id, code, status, stdout_stderr) VALUES (?1, ?2, ?3, ?4)",
|
||||
(bisect.id, &bisect.code, status, stdout_stderr),
|
||||
)
|
||||
.wrap_err("insert into database")
|
||||
.map(drop)
|
||||
}
|
||||
|
||||
pub fn update_bisection_status(conn: &Connection, bisect: &Bisection) -> color_eyre::Result<()> {
|
||||
let (status, stdout_stderr) = status_to_sql(&bisect.status);
|
||||
|
||||
conn.execute(
|
||||
"UPDATE bisect SET status = ?1, stdout_stderr = ?2 WHERE bisect.job_id = ?3",
|
||||
(status, stdout_stderr, bisect.id),
|
||||
)
|
||||
.wrap_err("insert into database")
|
||||
.map(drop)
|
||||
}
|
||||
|
||||
pub fn get_bisections(conn: &Connection) -> color_eyre::Result<Vec<Bisection>> {
|
||||
let mut select = conn
|
||||
.prepare("SELECT job_id, code, status, stdout, stderr FROM bisect")
|
||||
.prepare("SELECT job_id, code, status, stdout_stderr FROM bisect")
|
||||
.wrap_err("preparing select")?;
|
||||
|
||||
let iter = select
|
||||
|
|
@ -37,8 +64,12 @@ pub fn get_bisections(conn: &Connection) -> color_eyre::Result<Vec<Bisection>> {
|
|||
code: row.get(1)?,
|
||||
status: match row.get(2)? {
|
||||
0 => BisectStatus::InProgress,
|
||||
1 => BisectStatus::Error(row.get(3)?),
|
||||
2 => BisectStatus::Success(row.get(3)?),
|
||||
1 => BisectStatus::Error {
|
||||
output: row.get(3)?,
|
||||
},
|
||||
2 => BisectStatus::Success {
|
||||
output: row.get(3)?,
|
||||
},
|
||||
_ => return Err(rusqlite::Error::InvalidQuery), // actually not lol
|
||||
},
|
||||
})
|
||||
|
|
@ -48,3 +79,30 @@ pub fn get_bisections(conn: &Connection) -> color_eyre::Result<Vec<Bisection>> {
|
|||
iter.collect::<Result<Vec<_>, rusqlite::Error>>()
|
||||
.wrap_err("getting bisections from db")
|
||||
}
|
||||
|
||||
pub fn get_bisection(conn: &Connection, id: Uuid) -> color_eyre::Result<Option<Bisection>> {
|
||||
let mut select = conn
|
||||
.prepare("SELECT job_id, code, status, stdout_stderr FROM bisect WHERE job_id = ?1")
|
||||
.wrap_err("preparing select")?;
|
||||
|
||||
let mut iter = select
|
||||
.query_map([id], |row| {
|
||||
Ok(Bisection {
|
||||
id: row.get(0)?,
|
||||
code: row.get(1)?,
|
||||
status: match row.get(2)? {
|
||||
0 => BisectStatus::InProgress,
|
||||
1 => BisectStatus::Error {
|
||||
output: row.get(3)?,
|
||||
},
|
||||
2 => BisectStatus::Success {
|
||||
output: row.get(3)?,
|
||||
},
|
||||
_ => return Err(rusqlite::Error::InvalidQuery), // actually not lol
|
||||
},
|
||||
})
|
||||
})
|
||||
.wrap_err("getting bisections from db query")?;
|
||||
|
||||
iter.next().transpose().wrap_err("getting bisection")
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue