From eb02bc77fbff74a86a688f227e4254b3c397710c Mon Sep 17 00:00:00 2001 From: Matthias Kadenbach Date: Sun, 19 Feb 2017 16:06:11 -0800 Subject: [PATCH] allow to force NilVersion --- cli/commands.go | 2 +- cli/main.go | 8 ++++++-- database/driver.go | 1 + migrate.go | 8 ++++++-- 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/cli/commands.go b/cli/commands.go index 86a7593..ac01c6b 100644 --- a/cli/commands.go +++ b/cli/commands.go @@ -42,7 +42,7 @@ func dropCmd(m *migrate.Migrate) { } } -func forceCmd(m *migrate.Migrate, v uint) { +func forceCmd(m *migrate.Migrate, v int) { if err := m.Force(v); err != nil { log.fatalErr(err) } diff --git a/cli/main.go b/cli/main.go index 966de50..278d134 100644 --- a/cli/main.go +++ b/cli/main.go @@ -182,12 +182,16 @@ Commands: log.fatal("error: please specify version argument V") } - v, err := strconv.ParseUint(flag.Arg(1), 10, 64) + v, err := strconv.ParseInt(flag.Arg(1), 10, 64) if err != nil { log.fatal("error: can't read version argument V") } - forceCmd(migrater, uint(v)) + if v < -1 { + log.fatal("error: argument V must be >= -1") + } + + forceCmd(migrater, int(v)) if log.verbose { log.Println("Finished after", time.Now().Sub(startTime)) diff --git a/database/driver.go b/database/driver.go index 3408af9..53d5240 100644 --- a/database/driver.go +++ b/database/driver.go @@ -63,6 +63,7 @@ type Driver interface { // SetVersion saves version and dirty state. // Migrate will call this function before and after each call to Run. + // version must be >= -1. -1 means NilVersion. SetVersion(version int, dirty bool) error // Version returns the currently active version and if the database is dirty. diff --git a/migrate.go b/migrate.go index 2a620c0..9d14752 100644 --- a/migrate.go +++ b/migrate.go @@ -355,12 +355,16 @@ func (m *Migrate) Run(migration ...*Migration) error { // Force sets a migration version. // It does not check any currently active version in database. // It does not check if the database is dirty. -func (m *Migrate) Force(version uint) error { +func (m *Migrate) Force(version int) error { + if version < -1 { + panic("version must be >= -1") + } + if err := m.lock(); err != nil { return err } - if err := m.databaseDrv.SetVersion(int(version), false); err != nil { + if err := m.databaseDrv.SetVersion(version, false); err != nil { return m.unlockErr(err) }