From 7b734bbbe8f4360b5db5977788e3fa3b5f3cd1b0 Mon Sep 17 00:00:00 2001 From: arthurkushman Date: Thu, 30 Mar 2023 17:35:50 +0300 Subject: [PATCH] #3: Change migration seq nums to timestamp generation --- cmd/migrate.go | 41 +++++++++++++++++------------------------ 1 file changed, 17 insertions(+), 24 deletions(-) diff --git a/cmd/migrate.go b/cmd/migrate.go index 184c712..2657bc7 100644 --- a/cmd/migrate.go +++ b/cmd/migrate.go @@ -26,10 +26,11 @@ import ( "os" "path/filepath" "strconv" - "strings" + "time" - "github.com/cloudspannerecosystem/wrench/pkg/spanner" "github.com/spf13/cobra" + + "github.com/cloudspannerecosystem/wrench/pkg/spanner" ) const ( @@ -37,6 +38,10 @@ const ( migrationTableName = "SchemaMigrations" ) +const ( + createMigrationFileLayout = "20060102150405" +) + // migrateCmd represents the migrate command var migrateCmd = &cobra.Command{ Use: "migrate", @@ -225,37 +230,25 @@ func migrateSet(c *cobra.Command, args []string) error { func createMigrationFile(dir string, name string, digits int) (string, error) { if name != "" && !spanner.MigrationNameRegex.MatchString(name) { - return "", errors.New("Invalid migration file name.") - } - - ms, err := spanner.LoadMigrations(dir) - if err != nil { - return "", err - } - - var v uint = 1 - if len(ms) > 0 { - v = ms[len(ms)-1].Version + 1 - } - vStr := fmt.Sprint(v) - - padding := digits - len(vStr) - if padding > 0 { - vStr = strings.Repeat("0", padding) + vStr + return "", errors.New("invalid migration file name") } + fileTimestampStr := time.Now().Format(createMigrationFileLayout) var filename string - if name == "" { - filename = filepath.Join(dir, fmt.Sprintf("%s.sql", vStr)) - } else { - filename = filepath.Join(dir, fmt.Sprintf("%s_%s.sql", vStr, name)) + filename = filepath.Join(dir, fmt.Sprintf("%s.sql", fileTimestampStr)) + if name != "" { + filename = filepath.Join(dir, fmt.Sprintf("%s_%s.sql", fileTimestampStr, name)) } fp, err := os.Create(filename) + defer func() { + if defErr := fp.Close(); defErr != nil { + err = defErr + } + }() if err != nil { return "", err } - fp.Close() return filename, nil }