diff --git a/cmd/goose/cmd_down.go b/cmd/goose/cmd_down.go index cab7a64..91c55a6 100644 --- a/cmd/goose/cmd_down.go +++ b/cmd/goose/cmd_down.go @@ -20,7 +20,11 @@ func downRun(cmd *Command, args ...string) { log.Fatal(err) } - current := goose.GetDBVersion(conf) + current, err := goose.GetDBVersion(conf) + if err != nil { + log.Fatal(err) + } + if current == 0 { fmt.Println("db is empty, can't go down.") return diff --git a/cmd/goose/cmd_redo.go b/cmd/goose/cmd_redo.go index 2a68932..93a4836 100644 --- a/cmd/goose/cmd_redo.go +++ b/cmd/goose/cmd_redo.go @@ -18,7 +18,11 @@ func redoRun(cmd *Command, args ...string) { log.Fatal(err) } - target := goose.GetDBVersion(conf) + target, err := goose.GetDBVersion(conf) + if err != nil { + log.Fatal(err) + } + _, earliest := goose.GetPreviousDBVersion(conf.MigrationsDir, target) downRun(cmd, args...) diff --git a/lib/goose/migrate.go b/lib/goose/migrate.go index 8e91950..08add2c 100644 --- a/lib/goose/migrate.go +++ b/lib/goose/migrate.go @@ -266,20 +266,20 @@ func createVersionTable(conf *DBConf, db *sql.DB) error { // wrapper for EnsureDBVersion for callers that don't already have // their own DB instance -func GetDBVersion(conf *DBConf) int64 { +func GetDBVersion(conf *DBConf) (version int64, err error) { db, err := sql.Open(conf.Driver.Name, conf.Driver.OpenStr) if err != nil { - log.Fatal("couldn't open DB:", err) + return -1, err } defer db.Close() - version, err := EnsureDBVersion(conf, db) + version, err = EnsureDBVersion(conf, db) if err != nil { - log.Fatalf("couldn't get DB version: %v", err) + return -1, err } - return version + return version, nil } func GetPreviousDBVersion(dirpath string, version int64) (previous, earliest int64) {