diff options
author | Joe Chen <jc@unknwon.io> | 2022-06-12 14:15:01 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-06-12 14:15:01 +0800 |
commit | b772603d78cb10f0501f3d08b01553bb33914b6e (patch) | |
tree | 5f160df17f1bbd357370b3aeeb5289b0a5c3c08d /internal/db/migrations/migrations.go | |
parent | 2e19f5a3c8193776685a5e9fea9ca8663f14dd8d (diff) |
migrations: add tests and remove XORM (#7050)
Diffstat (limited to 'internal/db/migrations/migrations.go')
-rw-r--r-- | internal/db/migrations/migrations.go | 63 |
1 files changed, 33 insertions, 30 deletions
diff --git a/internal/db/migrations/migrations.go b/internal/db/migrations/migrations.go index 1e89883f..4f93b9c5 100644 --- a/internal/db/migrations/migrations.go +++ b/internal/db/migrations/migrations.go @@ -5,11 +5,9 @@ package migrations import ( - "fmt" - + "github.com/pkg/errors" "gorm.io/gorm" log "unknwon.dev/clog/v2" - "xorm.io/xorm" ) const minDBVersion = 19 @@ -58,29 +56,32 @@ var migrations = []Migration{ NewMigration("migrate access tokens to store SHA56", migrateAccessTokenToSHA256), } -// Migrate database to current version -func Migrate(x *xorm.Engine, db *gorm.DB) error { - if err := x.Sync(new(Version)); err != nil { - return fmt.Errorf("sync: %v", err) +// Migrate migrates the database schema and/or data to the current version. +func Migrate(db *gorm.DB) error { + err := db.AutoMigrate(new(Version)) + if err != nil { + return errors.Wrap(err, `auto migrate "version" table`) } - currentVersion := &Version{ID: 1} - has, err := x.Get(currentVersion) - if err != nil { - return fmt.Errorf("get: %v", err) - } else if !has { - // If the version record does not exist we think - // it is a fresh installation and we can skip all migrations. - currentVersion.ID = 0 - currentVersion.Version = int64(minDBVersion + len(migrations)) - - if _, err = x.InsertOne(currentVersion); err != nil { - return fmt.Errorf("insert: %v", err) + var current Version + err = db.Where("id = ?", 1).First(¤t).Error + if err == gorm.ErrRecordNotFound { + err = db.Create( + &Version{ + ID: 1, + Version: int64(minDBVersion + len(migrations)), + }, + ).Error + if err != nil { + return errors.Wrap(err, "create the version record") } + return nil + + } else if err != nil { + return errors.Wrap(err, "get the version record") } - v := currentVersion.Version - if minDBVersion > v { + if minDBVersion > current.Version { log.Fatal(` Hi there, thank you for using Gogs for so long! However, Gogs has stopped supporting auto-migration from your previously installed version. @@ -108,20 +109,22 @@ In case you're stilling getting this notice, go through instructions again until return nil } - if int(v-minDBVersion) > len(migrations) { + if int(current.Version-minDBVersion) > len(migrations) { // User downgraded Gogs. - currentVersion.Version = int64(len(migrations) + minDBVersion) - _, err = x.Id(1).Update(currentVersion) - return err + current.Version = int64(len(migrations) + minDBVersion) + return db.Where("id = ?", current.ID).Updates(current).Error } - for i, m := range migrations[v-minDBVersion:] { + + for i, m := range migrations[current.Version-minDBVersion:] { log.Info("Migration: %s", m.Description()) if err = m.Migrate(db); err != nil { - return fmt.Errorf("do migrate: %v", err) + return errors.Wrap(err, "do migrate") } - currentVersion.Version = v + int64(i) + 1 - if _, err = x.Id(1).Update(currentVersion); err != nil { - return err + + current.Version += int64(i) + 1 + err = db.Where("id = ?", current.ID).Updates(current).Error + if err != nil { + return errors.Wrap(err, "update the version record") } } return nil |