Dmitriy Pleshevskiy
f98dd4f0c8
I added a single transaction option for apply, upgrade, and downgrade commands, which wraps all migrations into a single transaction. This gives you the ability to safely roll up migrations and, if some unforeseen situation occurs, roll them back. Unfortunately if there is an error in syntax, mysql will not rollback the migration and commits automatically :( I will research this issue. Closes #2
106 lines
2.7 KiB
Rust
106 lines
2.7 KiB
Rust
use std::path::PathBuf;
|
|
use structopt::clap;
|
|
pub use structopt::StructOpt;
|
|
|
|
#[derive(Debug, StructOpt, Clone)]
|
|
#[structopt(bin_name = "migra", name = "Migra")]
|
|
pub(crate) struct AppOpt {
|
|
#[structopt(name = "config", short, long)]
|
|
pub config_path: Option<PathBuf>,
|
|
|
|
#[structopt(subcommand)]
|
|
pub command: Command,
|
|
}
|
|
|
|
#[derive(Debug, StructOpt, Clone)]
|
|
pub(crate) enum Command {
|
|
Init,
|
|
|
|
Apply(ApplyCommandOpt),
|
|
|
|
Make(MakeCommandOpt),
|
|
|
|
#[structopt(name = "list", visible_alias = "ls")]
|
|
List,
|
|
|
|
#[structopt(name = "upgrade", visible_alias = "up")]
|
|
Upgrade(UpgradeCommandOpt),
|
|
|
|
#[structopt(name = "downgrade", visible_alias = "down")]
|
|
Downgrade(DowngradeCommandOpt),
|
|
|
|
Completions(CompletionsShell),
|
|
}
|
|
|
|
#[derive(Debug, StructOpt, Clone)]
|
|
pub(crate) struct TransactionOpts {
|
|
#[structopt(long = "single-transaction")]
|
|
pub single_transaction: bool,
|
|
}
|
|
|
|
#[derive(Debug, StructOpt, Clone)]
|
|
pub(crate) struct ApplyCommandOpt {
|
|
#[structopt(parse(from_os_str), required = true)]
|
|
pub file_paths: Vec<PathBuf>,
|
|
|
|
#[structopt(flatten)]
|
|
pub transaction_opts: TransactionOpts,
|
|
}
|
|
|
|
#[derive(Debug, StructOpt, Clone)]
|
|
pub(crate) struct MakeCommandOpt {
|
|
/// Name of the migration to create in specify directory.
|
|
#[structopt(parse(from_str))]
|
|
pub migration_name: String,
|
|
}
|
|
|
|
#[derive(Debug, StructOpt, Clone)]
|
|
pub(crate) struct UpgradeCommandOpt {
|
|
/// Name of the existing migration that will update the schema
|
|
/// in the database.
|
|
#[structopt(long = "name")]
|
|
pub migration_name: Option<String>,
|
|
|
|
/// How many existing migrations do we have to update.
|
|
#[structopt(long = "number", short = "n")]
|
|
pub migrations_number: Option<usize>,
|
|
|
|
#[structopt(flatten)]
|
|
pub transaction_opts: TransactionOpts,
|
|
}
|
|
|
|
#[derive(Debug, StructOpt, Clone)]
|
|
pub(crate) struct DowngradeCommandOpt {
|
|
/// How many applied migrations do we have to rollback.
|
|
#[structopt(long = "number", short = "n", default_value = "1")]
|
|
pub migrations_number: usize,
|
|
|
|
/// Rolls back all applied migrations. Ignores --number option.
|
|
#[structopt(long = "all")]
|
|
pub all_migrations: bool,
|
|
|
|
#[structopt(flatten)]
|
|
pub transaction_opts: TransactionOpts,
|
|
}
|
|
|
|
#[derive(Debug, StructOpt, Clone)]
|
|
pub(crate) enum CompletionsShell {
|
|
Bash,
|
|
Fish,
|
|
Zsh,
|
|
PowerShell,
|
|
Elvish,
|
|
}
|
|
|
|
impl From<CompletionsShell> for clap::Shell {
|
|
fn from(shell: CompletionsShell) -> Self {
|
|
match shell {
|
|
CompletionsShell::Bash => Self::Bash,
|
|
CompletionsShell::Fish => Self::Fish,
|
|
CompletionsShell::Zsh => Self::Zsh,
|
|
CompletionsShell::PowerShell => Self::PowerShell,
|
|
CompletionsShell::Elvish => Self::Elvish,
|
|
}
|
|
}
|
|
}
|