60 lines
1.8 KiB
Rust
60 lines
1.8 KiB
Rust
|
use clap::{App, Arg, ArgMatches, SubCommand};
|
||
|
|
||
|
use plume_models::{migrations::IMPORTED_MIGRATIONS, Connection};
|
||
|
use std::path::Path;
|
||
|
|
||
|
pub fn command<'a, 'b>() -> App<'a, 'b> {
|
||
|
SubCommand::with_name("migration")
|
||
|
.about("Manage migrations")
|
||
|
.subcommand(
|
||
|
SubCommand::with_name("run")
|
||
|
.arg(
|
||
|
Arg::with_name("path")
|
||
|
.short("p")
|
||
|
.long("path")
|
||
|
.takes_value(true)
|
||
|
.required(false)
|
||
|
.help("Path to Plume's working directory"),
|
||
|
)
|
||
|
.about("Run migrations"),
|
||
|
)
|
||
|
.subcommand(
|
||
|
SubCommand::with_name("redo")
|
||
|
.arg(
|
||
|
Arg::with_name("path")
|
||
|
.short("p")
|
||
|
.long("path")
|
||
|
.takes_value(true)
|
||
|
.required(false)
|
||
|
.help("Path to Plume's working directory"),
|
||
|
)
|
||
|
.about("Rerun latest migration"),
|
||
|
)
|
||
|
}
|
||
|
|
||
|
pub fn run<'a>(args: &ArgMatches<'a>, conn: &Connection) {
|
||
|
let conn = conn;
|
||
|
match args.subcommand() {
|
||
|
("run", Some(x)) => run_(x, conn),
|
||
|
("redo", Some(x)) => redo(x, conn),
|
||
|
("", None) => command().print_help().unwrap(),
|
||
|
_ => println!("Unknown subcommand"),
|
||
|
}
|
||
|
}
|
||
|
|
||
|
fn run_<'a>(args: &ArgMatches<'a>, conn: &Connection) {
|
||
|
let path = args.value_of("path").unwrap_or(".");
|
||
|
|
||
|
IMPORTED_MIGRATIONS
|
||
|
.run_pending_migrations(conn, Path::new(path))
|
||
|
.expect("Failed to run migrations")
|
||
|
}
|
||
|
|
||
|
fn redo<'a>(args: &ArgMatches<'a>, conn: &Connection) {
|
||
|
let path = args.value_of("path").unwrap_or(".");
|
||
|
|
||
|
IMPORTED_MIGRATIONS
|
||
|
.rerun_last_migration(conn, Path::new(path))
|
||
|
.expect("Failed to rerun migrations")
|
||
|
}
|