[cli] Add -u, --universal-time option in generate to use Utc instead of Local (#947)

This commit is contained in:
Animesh Sahu 2022-09-25 08:03:50 +05:30 committed by GitHub
parent 6816e86f4d
commit ad5e8c1264
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 25 additions and 9 deletions

View File

@ -52,6 +52,14 @@ pub enum MigrateSubcommands {
help = "Name of the new migration" help = "Name of the new migration"
)] )]
migration_name: String, migration_name: String,
#[clap(
action,
short,
long,
help = "Generate migration file based on Utc time instead of Local time"
)]
universal_time: bool,
}, },
#[clap(about = "Drop all tables from the database, then reapply all migrations")] #[clap(about = "Drop all tables from the database, then reapply all migrations")]
Fresh, Fresh,

View File

@ -1,4 +1,4 @@
use chrono::Local; use chrono::{Local, Utc};
use regex::Regex; use regex::Regex;
use std::{ use std::{
error::Error, error::Error,
@ -17,9 +17,10 @@ pub fn run_migrate_command(
) -> Result<(), Box<dyn Error>> { ) -> Result<(), Box<dyn Error>> {
match command { match command {
Some(MigrateSubcommands::Init) => run_migrate_init(migration_dir)?, Some(MigrateSubcommands::Init) => run_migrate_init(migration_dir)?,
Some(MigrateSubcommands::Generate { migration_name }) => { Some(MigrateSubcommands::Generate {
run_migrate_generate(migration_dir, &migration_name)? migration_name,
} universal_time,
}) => run_migrate_generate(migration_dir, &migration_name, universal_time)?,
_ => { _ => {
let (subcommand, migration_dir, steps, verbose) = match command { let (subcommand, migration_dir, steps, verbose) = match command {
Some(MigrateSubcommands::Fresh) => ("fresh", migration_dir, None, verbose), Some(MigrateSubcommands::Fresh) => ("fresh", migration_dir, None, verbose),
@ -110,12 +111,18 @@ pub fn run_migrate_init(migration_dir: &str) -> Result<(), Box<dyn Error>> {
pub fn run_migrate_generate( pub fn run_migrate_generate(
migration_dir: &str, migration_dir: &str,
migration_name: &str, migration_name: &str,
universal_time: bool,
) -> Result<(), Box<dyn Error>> { ) -> Result<(), Box<dyn Error>> {
println!("Generating new migration..."); println!("Generating new migration...");
// build new migration filename // build new migration filename
let now = Local::now(); const FMT: &str = "%Y%m%d_%H%M%S";
let migration_name = format!("m{}_{}", now.format("%Y%m%d_%H%M%S"), migration_name); let formatted_now = if universal_time {
Utc::now().format(FMT)
} else {
Local::now().format(FMT)
};
let migration_name = format!("m{}_{}", formatted_now, migration_name);
create_new_migration(&migration_name, migration_dir)?; create_new_migration(&migration_name, migration_dir)?;
update_migrator(&migration_name, migration_dir)?; update_migrator(&migration_name, migration_dir)?;

View File

@ -65,9 +65,10 @@ where
Some(MigrateSubcommands::Up { num }) => M::up(db, Some(num)).await?, Some(MigrateSubcommands::Up { num }) => M::up(db, Some(num)).await?,
Some(MigrateSubcommands::Down { num }) => M::down(db, Some(num)).await?, Some(MigrateSubcommands::Down { num }) => M::down(db, Some(num)).await?,
Some(MigrateSubcommands::Init) => run_migrate_init(MIGRATION_DIR)?, Some(MigrateSubcommands::Init) => run_migrate_init(MIGRATION_DIR)?,
Some(MigrateSubcommands::Generate { migration_name }) => { Some(MigrateSubcommands::Generate {
run_migrate_generate(MIGRATION_DIR, &migration_name)? migration_name,
} universal_time,
}) => run_migrate_generate(MIGRATION_DIR, &migration_name, universal_time)?,
_ => M::up(db, None).await?, _ => M::up(db, None).await?,
}; };