func main() { cfgPath := "lobster.cfg" if len(os.Args) >= 2 { cfgPath = os.Args[1] } lobster.Setup(cfgPath) url := "mysql://" + lobster.GetDatabaseString() pipe := pipep.New() go migrate.Up(pipe, url, "./db/migrations") hadError := false done := false for !done { select { case item, more := <-pipe: if !more { done = true } else { switch item.(type) { case string: fmt.Println(item.(string)) case error: fmt.Printf("ERROR: %v\n", item) hadError = true case file.File: f := item.(file.File) if f.Direction == direction.Up { fmt.Print("> ") } else if f.Direction == direction.Down { fmt.Print("< ") } fmt.Println(f.FileName) default: fmt.Printf("%v", item) } } } } if !hadError { fmt.Println("database up to date") } }
func main() { flag.Usage = func() { helpCmd() } flag.Parse() command := flag.Arg(0) if *version { fmt.Println(Version) os.Exit(0) } if *migrationsPath == "" { *migrationsPath, _ = os.Getwd() } switch command { case "create": verifyMigrationsPath(*migrationsPath) name := flag.Arg(1) if name == "" { fmt.Println("Please specify name.") os.Exit(1) } migrationFile, err := migrate.Create(*url, *migrationsPath, name) if err != nil { fmt.Println(err) os.Exit(1) } fmt.Printf("Version %v migration files created in %v:\n", migrationFile.Version, *migrationsPath) fmt.Println(migrationFile.UpFile.FileName) fmt.Println(migrationFile.DownFile.FileName) case "migrate": verifyMigrationsPath(*migrationsPath) relativeN := flag.Arg(1) relativeNInt, err := strconv.Atoi(relativeN) if err != nil { fmt.Println("Unable to parse param <n>.") os.Exit(1) } timerStart = time.Now() pipe := pipep.New() go migrate.Migrate(pipe, *url, *migrationsPath, relativeNInt) ok := writePipe(pipe) printTimer() if !ok { os.Exit(1) } case "goto": verifyMigrationsPath(*migrationsPath) toVersion := flag.Arg(1) toVersionInt, err := strconv.Atoi(toVersion) if err != nil || toVersionInt < 0 { fmt.Println("Unable to parse param <v>.") os.Exit(1) } currentVersion, err := migrate.Version(*url, *migrationsPath) if err != nil { fmt.Println(err) os.Exit(1) } relativeNInt := toVersionInt - int(currentVersion) timerStart = time.Now() pipe := pipep.New() go migrate.Migrate(pipe, *url, *migrationsPath, relativeNInt) ok := writePipe(pipe) printTimer() if !ok { os.Exit(1) } case "up": verifyMigrationsPath(*migrationsPath) timerStart = time.Now() pipe := pipep.New() go migrate.Up(pipe, *url, *migrationsPath) ok := writePipe(pipe) printTimer() if !ok { os.Exit(1) } case "down": verifyMigrationsPath(*migrationsPath) timerStart = time.Now() pipe := pipep.New() go migrate.Down(pipe, *url, *migrationsPath) ok := writePipe(pipe) printTimer() if !ok { os.Exit(1) } case "redo": verifyMigrationsPath(*migrationsPath) timerStart = time.Now() pipe := pipep.New() go migrate.Redo(pipe, *url, *migrationsPath) ok := writePipe(pipe) printTimer() if !ok { os.Exit(1) } case "reset": verifyMigrationsPath(*migrationsPath) timerStart = time.Now() pipe := pipep.New() go migrate.Reset(pipe, *url, *migrationsPath) ok := writePipe(pipe) printTimer() if !ok { os.Exit(1) } case "version": verifyMigrationsPath(*migrationsPath) version, err := migrate.Version(*url, *migrationsPath) if err != nil { fmt.Println(err) os.Exit(1) } fmt.Println(version) default: fallthrough case "help": helpCmd() } }