From ad5e8c12643dbb0806adf60f190784d245a08e06 Mon Sep 17 00:00:00 2001 From: Animesh Sahu Date: Sun, 25 Sep 2022 08:03:50 +0530 Subject: [PATCH] [cli] Add -u, --universal-time option in `generate` to use Utc instead of Local (#947) --- sea-orm-cli/src/cli.rs | 8 ++++++++ sea-orm-cli/src/commands/migrate.rs | 19 +++++++++++++------ sea-orm-migration/src/cli.rs | 7 ++++--- 3 files changed, 25 insertions(+), 9 deletions(-) diff --git a/sea-orm-cli/src/cli.rs b/sea-orm-cli/src/cli.rs index 001a9b9b..827a17e1 100644 --- a/sea-orm-cli/src/cli.rs +++ b/sea-orm-cli/src/cli.rs @@ -52,6 +52,14 @@ pub enum MigrateSubcommands { help = "Name of the new migration" )] 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")] Fresh, diff --git a/sea-orm-cli/src/commands/migrate.rs b/sea-orm-cli/src/commands/migrate.rs index 2b9d7c4a..ac612a59 100644 --- a/sea-orm-cli/src/commands/migrate.rs +++ b/sea-orm-cli/src/commands/migrate.rs @@ -1,4 +1,4 @@ -use chrono::Local; +use chrono::{Local, Utc}; use regex::Regex; use std::{ error::Error, @@ -17,9 +17,10 @@ pub fn run_migrate_command( ) -> Result<(), Box> { match command { Some(MigrateSubcommands::Init) => run_migrate_init(migration_dir)?, - Some(MigrateSubcommands::Generate { migration_name }) => { - run_migrate_generate(migration_dir, &migration_name)? - } + Some(MigrateSubcommands::Generate { + migration_name, + universal_time, + }) => run_migrate_generate(migration_dir, &migration_name, universal_time)?, _ => { let (subcommand, migration_dir, steps, verbose) = match command { Some(MigrateSubcommands::Fresh) => ("fresh", migration_dir, None, verbose), @@ -110,12 +111,18 @@ pub fn run_migrate_init(migration_dir: &str) -> Result<(), Box> { pub fn run_migrate_generate( migration_dir: &str, migration_name: &str, + universal_time: bool, ) -> Result<(), Box> { println!("Generating new migration..."); // build new migration filename - let now = Local::now(); - let migration_name = format!("m{}_{}", now.format("%Y%m%d_%H%M%S"), migration_name); + const FMT: &str = "%Y%m%d_%H%M%S"; + 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)?; update_migrator(&migration_name, migration_dir)?; diff --git a/sea-orm-migration/src/cli.rs b/sea-orm-migration/src/cli.rs index 09183f23..de228c40 100644 --- a/sea-orm-migration/src/cli.rs +++ b/sea-orm-migration/src/cli.rs @@ -65,9 +65,10 @@ where Some(MigrateSubcommands::Up { num }) => M::up(db, Some(num)).await?, Some(MigrateSubcommands::Down { num }) => M::down(db, Some(num)).await?, Some(MigrateSubcommands::Init) => run_migrate_init(MIGRATION_DIR)?, - Some(MigrateSubcommands::Generate { migration_name }) => { - run_migrate_generate(MIGRATION_DIR, &migration_name)? - } + Some(MigrateSubcommands::Generate { + migration_name, + universal_time, + }) => run_migrate_generate(MIGRATION_DIR, &migration_name, universal_time)?, _ => M::up(db, None).await?, };