github.com/Redstoneguy129/cli@v0.0.0-20230211220159-15dca4e91917/internal/migration/new/new.go (about) 1 package new 2 3 import ( 4 "fmt" 5 "io" 6 "os" 7 "path/filepath" 8 9 "github.com/spf13/afero" 10 "github.com/Redstoneguy129/cli/internal/utils" 11 ) 12 13 func Run(migrationName string, stdin afero.File, fsys afero.Fs) error { 14 path := GetMigrationPath(migrationName) 15 if err := utils.MkdirIfNotExistFS(fsys, filepath.Dir(path)); err != nil { 16 return err 17 } 18 f, err := fsys.OpenFile(path, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644) 19 if err != nil { 20 return err 21 } 22 defer f.Close() 23 24 if fi, err := stdin.Stat(); err != nil { 25 return err 26 } else if (fi.Mode() & os.ModeCharDevice) == 0 { 27 // Ref: https://stackoverflow.com/a/26567513 28 if _, err := io.Copy(f, stdin); err != nil { 29 return err 30 } 31 } 32 33 fmt.Println("Created new migration at " + utils.Bold(path) + ".") 34 return nil 35 } 36 37 func GetMigrationPath(migrationName string) string { 38 name := utils.GetCurrentTimestamp() + "_" + migrationName + ".sql" 39 return filepath.Join(utils.MigrationsDir, name) 40 }