aboutsummaryrefslogtreecommitdiff
path: root/internal/db/migrations/migrations.go
diff options
context:
space:
mode:
authorJoe Chen <jc@unknwon.io>2022-06-12 14:15:01 +0800
committerGitHub <noreply@github.com>2022-06-12 14:15:01 +0800
commitb772603d78cb10f0501f3d08b01553bb33914b6e (patch)
tree5f160df17f1bbd357370b3aeeb5289b0a5c3c08d /internal/db/migrations/migrations.go
parent2e19f5a3c8193776685a5e9fea9ca8663f14dd8d (diff)
migrations: add tests and remove XORM (#7050)
Diffstat (limited to 'internal/db/migrations/migrations.go')
-rw-r--r--internal/db/migrations/migrations.go63
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(&current).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