Dmitriy Pleshevskiy
8aa57a00bc
it's new flag --all that rollbacks all applied migrations from database.
33 lines
970 B
Rust
33 lines
970 B
Rust
use crate::config::Config;
|
|
use crate::database::prelude::*;
|
|
use crate::database::MigrationManager;
|
|
use crate::opts::DowngradeCommandOpt;
|
|
use crate::StdResult;
|
|
use std::cmp;
|
|
use std::convert::TryFrom;
|
|
|
|
pub(crate) fn rollback_applied_migrations(
|
|
config: Config,
|
|
opts: DowngradeCommandOpt,
|
|
) -> StdResult<()> {
|
|
let mut manager = MigrationManager::try_from(&config)?;
|
|
|
|
let applied_migrations = manager.applied_migration_names()?;
|
|
let migrations = config.migrations()?;
|
|
|
|
let rollback_migrations_number = if opts.all_migrations {
|
|
applied_migrations.len()
|
|
} else {
|
|
cmp::min(opts.migrations_number, applied_migrations.len())
|
|
};
|
|
|
|
for migration_name in &applied_migrations[..rollback_migrations_number] {
|
|
if let Some(migration) = migrations.iter().find(|m| m.name() == migration_name) {
|
|
println!("downgrade {}...", migration.name());
|
|
manager.downgrade(&migration)?;
|
|
}
|
|
}
|
|
|
|
Ok(())
|
|
}
|