Archived
1
0
Fork 0
This repository has been archived on 2024-07-25. You can view files and clone it, but cannot push or open issues or pull requests.
migra/migra-cli/src/commands/list.rs

63 lines
1.8 KiB
Rust
Raw Normal View History

use crate::config::Config;
2021-02-15 13:06:09 +03:00
use crate::database::{DatabaseConnection, PostgresConnection};
use crate::error::{ErrorKind, StdResult};
2021-02-15 13:06:09 +03:00
use crate::migration::{
filter_pending_migrations, DatabaseMigrationManager, Migration, MigrationManager,
MigrationNames,
2021-02-15 13:06:09 +03:00
};
const EM_DASH: char = '—';
pub(crate) fn print_migration_lists(config: Config) -> StdResult<()> {
2021-02-15 13:06:09 +03:00
let applied_migration_names = match config.database_connection_string() {
Ok(ref database_connection_string) => {
2021-02-15 13:06:09 +03:00
let connection = PostgresConnection::open(database_connection_string)?;
let mut manager = MigrationManager::new(connection);
let applied_migration_names = manager.applied_migration_names()?;
show_applied_migrations(&applied_migration_names);
applied_migration_names
}
Err(e) if *e.kind() == ErrorKind::MissedEnvVar(String::new()) => {
println!("{}", e.kind());
println!("No connection to database");
Vec::new()
}
Err(e) => panic!(e),
};
println!();
2021-02-15 13:06:09 +03:00
let pending_migrations =
filter_pending_migrations(config.migrations()?, &applied_migration_names);
show_pending_migrations(&pending_migrations);
Ok(())
}
fn show_applied_migrations(applied_migration_names: &[String]) {
println!("Applied migrations:");
if applied_migration_names.is_empty() {
println!("{}", EM_DASH);
} else {
applied_migration_names
.iter()
.rev()
.for_each(|name| println!("{}", name));
}
}
fn show_pending_migrations(pending_migrations: &[Migration]) {
println!("Pending migrations:");
if pending_migrations.is_empty() {
println!("{}", EM_DASH);
} else {
pending_migrations.iter().for_each(|m| {
println!("{}", m.name());
});
}
}