diff --git a/cmd/goose/main.go b/cmd/goose/main.go index f4b40ba..78ac8ac 100644 --- a/cmd/goose/main.go +++ b/cmd/goose/main.go @@ -57,7 +57,12 @@ func main() { log.Fatalf("-dbstring=%q: %v\n", dbstring, err) } - if err := goose.Run(command, db, *dir); err != nil { + arguments := []string{*dir} + if len(args) > 3 { + arguments = append(arguments, args[3:]...) + } + + if err := goose.Run(command, db, arguments...); err != nil { log.Fatalf("goose run: %v", err) } } @@ -75,6 +80,7 @@ Examples: goose postgres "user=postgres dbname=postgres sslmode=disable" up goose mysql "user:password@/dbname" down goose sqlite3 ./foo.db status + goose postgres "user=postgres dbname=postgres sslmode=disable" create init sql Options: ` @@ -86,5 +92,6 @@ Commands: redo Re-run the latest migration status Dump the migration status for the current DB dbversion Print the current version of the database + create Creates a blank migration template ` ) diff --git a/create.go b/create.go new file mode 100644 index 0000000..3a8b9aa --- /dev/null +++ b/create.go @@ -0,0 +1,18 @@ +package goose + +import ( + "database/sql" + "fmt" + "time" +) + +// Create writes a new blank migration file. +func Create(db *sql.DB, name, migrationType, dir string) error { + path, err := CreateMigration(name, migrationType, dir, time.Now()) + if err != nil { + return err + } + fmt.Println(fmt.Sprintf("Created %s migration at %s", migrationType, path)) + + return nil +} diff --git a/goose.go b/goose.go index 1f2a75b..67b9934 100644 --- a/goose.go +++ b/goose.go @@ -5,7 +5,10 @@ import ( "fmt" ) -func Run(command string, db *sql.DB, dir string) error { +func Run(command string, db *sql.DB, args ...string) error { + dir := args[0] + additional := args[0:] + switch command { case "up": if err := Up(db, dir); err != nil { @@ -15,6 +18,10 @@ func Run(command string, db *sql.DB, dir string) error { if err := UpByOne(db, dir); err != nil { return err } + case "create": + if err := Create(db, additional[0], additional[1], dir); err != nil { + return err + } case "down": if err := Down(db, dir); err != nil { return err