dbtest program argument now clear the database.

It does a backup prior clearing.
This commit is contained in:
Greg Burri 2022-12-14 22:01:44 +01:00
parent 0a1631e66c
commit adcf4a5a5d

View file

@ -1,8 +1,9 @@
use std::path::Path;
use actix_files as fs;
use actix_web::{middleware, web, App, HttpServer};
use chrono::prelude::*;
use clap::Parser;
use log::error;
use data::db;
@ -60,6 +61,7 @@ async fn main() -> std::io::Result<()> {
#[derive(Parser, Debug)]
struct Args {
/// Will clear the database and insert some test data. (A backup is made first).
#[arg(long)]
dbtest: bool,
}
@ -68,6 +70,27 @@ fn process_args() -> bool {
let args = Args::parse();
if args.dbtest {
// Make a backup of the database.
let db_path = Path::new(consts::DB_DIRECTORY).join(consts::DB_FILENAME);
if db_path.exists() {
let db_path_bckup = (1..)
.find_map(|n| {
let p = db_path.with_extension(format!("sqlite.bckup{:03}", n));
if p.exists() {
None
} else {
Some(p)
}
})
.unwrap();
std::fs::copy(&db_path, &db_path_bckup).expect(&format!(
"Unable to make backup of {:?} to {:?}",
&db_path, &db_path_bckup
));
std::fs::remove_file(&db_path)
.expect(&format!("Unable to remove db file: {:?}", &db_path));
}
match db::Connection::new() {
Ok(con) => {
if let Err(error) = con.execute_file("sql/data_test.sql") {