initial commit
This commit is contained in:
+47
@@ -0,0 +1,47 @@
|
||||
package sqaffold
|
||||
|
||||
import (
|
||||
"code.aneur.in/go/version"
|
||||
)
|
||||
|
||||
func (s *Scaffold) Migrate() error {
|
||||
if err := s.migrateApp("sqaffold", s.migration()); err != nil {
|
||||
return Err(err)
|
||||
}
|
||||
|
||||
for appName, migration := range s.apps {
|
||||
if err := s.migrateApp(appName, migration); err != nil {
|
||||
return Err(err)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *Scaffold) migrateApp(appName string, migration version.Migration) error {
|
||||
currentVersion, err := s.GetVersion(appName)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
required, err := migration.Match(&version.Constraint{Gt: currentVersion})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
versions, _ := required.Versions()
|
||||
if len(versions) == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
var updateVersion *version.Version
|
||||
err = migration.Up(func(applied, next *version.Version) {
|
||||
updateVersion = applied
|
||||
})
|
||||
|
||||
if updateVersion != nil {
|
||||
s.setVersion(appName, updateVersion)
|
||||
}
|
||||
|
||||
return err
|
||||
}
|
||||
Reference in New Issue
Block a user