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 {
log.fatalErr(err)
}

View File

@ -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))

View File

@ -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.

View File

@ -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)
}