49bb8cb0bc
* import migrations via macro * panic on database not to the latest migration * add subcommand to plm * create migration that run tantivy index creation * remove diesel_cli from places it was * use our migration system for tests * create table __diesel_schema_migrations if needed
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")
|
|
}
|