allow to force NilVersion

This commit is contained in:
Matthias Kadenbach 2017-02-19 16:06:11 -08:00
parent 55f54251eb
commit eb02bc77fb
No known key found for this signature in database
GPG Key ID: DC1F4DC6D31A7031
4 changed files with 14 additions and 5 deletions

View File

@ -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 { if err := m.Force(v); err != nil {
log.fatalErr(err) log.fatalErr(err)
} }

View File

@ -182,12 +182,16 @@ Commands:
log.fatal("error: please specify version argument V") 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 { if err != nil {
log.fatal("error: can't read version argument V") 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 { if log.verbose {
log.Println("Finished after", time.Now().Sub(startTime)) log.Println("Finished after", time.Now().Sub(startTime))

View File

@ -63,6 +63,7 @@ type Driver interface {
// SetVersion saves version and dirty state. // SetVersion saves version and dirty state.
// Migrate will call this function before and after each call to Run. // 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 SetVersion(version int, dirty bool) error
// Version returns the currently active version and if the database is dirty. // Version returns the currently active version and if the database is dirty.

View File

@ -355,12 +355,16 @@ func (m *Migrate) Run(migration ...*Migration) error {
// Force sets a migration version. // Force sets a migration version.
// It does not check any currently active version in database. // It does not check any currently active version in database.
// It does not check if the database is dirty. // 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 { if err := m.lock(); err != nil {
return err 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) return m.unlockErr(err)
} }