summaryrefslogtreecommitdiffstats
path: root/models/migrations
diff options
context:
space:
mode:
authorDavid Schneiderbauer <daviian@users.noreply.github.com>2017-10-08 13:08:18 +0200
committerLunny Xiao <xiaolunwen@gmail.com>2017-10-08 19:08:18 +0800
commitebac051e7207181ac3d7bbe288536bf2224c9c0e (patch)
tree3622243563c05a11f7656fea8b3d31f726195fb5 /models/migrations
parent92123fe82a2dc4c01fdc180baaa7d2bfa2fe971a (diff)
downloadgitea-ebac051e7207181ac3d7bbe288536bf2224c9c0e.tar.gz
gitea-ebac051e7207181ac3d7bbe288536bf2224c9c0e.zip
Rewrite migrations to not depend on future code changes (#2604)
* v38 migration used an outdated version of RepoUnit model (#2602) * change repoUnit model in migration * fix v16 migration repo_unit table * fix lint error * move type definition inside function Signed-off-by: David Schneiderbauer <dschneiderbauer@gmail.com> * fix lint error Signed-off-by: David Schneiderbauer <dschneiderbauer@gmail.com> * Fix time tracking migration * Refactor code * Fix migration from Gogs * v38 migration used an outdated version of RepoUnit model (#2602) * change repoUnit model in migration * fix v16 migration repo_unit table * fix lint error * move type definition inside function Signed-off-by: David Schneiderbauer <dschneiderbauer@gmail.com> * fix lint error Signed-off-by: David Schneiderbauer <dschneiderbauer@gmail.com> * Fix time tracking migration * Refactor code * Fix migration from Gogs * add error check Signed-off-by: David Schneiderbauer <dschneiderbauer@gmail.com> * Additiomal fixes for migrations * Fix timetracking migration * Add back nil check
Diffstat (limited to 'models/migrations')
-rw-r--r--models/migrations/v15.go20
-rw-r--r--models/migrations/v16.go36
-rw-r--r--models/migrations/v37.go13
-rw-r--r--models/migrations/v38.go14
-rw-r--r--models/migrations/v39.go63
5 files changed, 83 insertions, 63 deletions
diff --git a/models/migrations/v15.go b/models/migrations/v15.go
index e29067c980..3492a7190b 100644
--- a/models/migrations/v15.go
+++ b/models/migrations/v15.go
@@ -10,21 +10,15 @@ import (
"github.com/go-xorm/xorm"
)
-// UserV15 describes the added field for User
-type UserV15 struct {
- KeepEmailPrivate bool
- AllowCreateOrganization bool
-}
-
-// TableName will be invoked by XORM to customrize the table name
-func (*UserV15) TableName() string {
- return "user"
-}
-
func createAllowCreateOrganizationColumn(x *xorm.Engine) error {
- if err := x.Sync2(new(UserV15)); err != nil {
+ type User struct {
+ KeepEmailPrivate bool
+ AllowCreateOrganization bool
+ }
+
+ if err := x.Sync2(new(User)); err != nil {
return fmt.Errorf("Sync2: %v", err)
- } else if _, err = x.Where("type=0").Cols("allow_create_organization").Update(&UserV15{AllowCreateOrganization: true}); err != nil {
+ } else if _, err = x.Where("`type` = 0").Cols("allow_create_organization").Update(&User{AllowCreateOrganization: true}); err != nil {
return fmt.Errorf("set allow_create_organization: %v", err)
}
return nil
diff --git a/models/migrations/v16.go b/models/migrations/v16.go
index 8ce37ea7db..5b8ec19d32 100644
--- a/models/migrations/v16.go
+++ b/models/migrations/v16.go
@@ -13,17 +13,6 @@ import (
"github.com/go-xorm/xorm"
)
-// RepoUnit describes all units of a repository
-type RepoUnit struct {
- ID int64
- RepoID int64 `xorm:"INDEX(s)"`
- Type int `xorm:"INDEX(s)"`
- Index int
- Config map[string]interface{} `xorm:"JSON"`
- CreatedUnix int64 `xorm:"INDEX CREATED"`
- Created time.Time `xorm:"-"`
-}
-
// Enumerate all the unit types
const (
V16UnitTypeCode = iota + 1 // 1 code
@@ -37,14 +26,25 @@ const (
V16UnitTypeExternalTracker // 9 ExternalTracker
)
-// Repo describes a repository
-type Repo struct {
- ID int64
- EnableWiki, EnableExternalWiki, EnableIssues, EnableExternalTracker, EnablePulls bool
- ExternalWikiURL, ExternalTrackerURL, ExternalTrackerFormat, ExternalTrackerStyle string
-}
-
func addUnitsToTables(x *xorm.Engine) error {
+ // RepoUnit describes all units of a repository
+ type RepoUnit struct {
+ ID int64
+ RepoID int64 `xorm:"INDEX(s)"`
+ Type int `xorm:"INDEX(s)"`
+ Index int
+ Config map[string]interface{} `xorm:"JSON"`
+ CreatedUnix int64 `xorm:"INDEX CREATED"`
+ Created time.Time `xorm:"-"`
+ }
+
+ // Repo describes a repository
+ type Repo struct {
+ ID int64
+ EnableWiki, EnableExternalWiki, EnableIssues, EnableExternalTracker, EnablePulls bool
+ ExternalWikiURL, ExternalTrackerURL, ExternalTrackerFormat, ExternalTrackerStyle string
+ }
+
var repos []Repo
err := x.Table("repository").Select("*").Find(&repos)
if err != nil {
diff --git a/models/migrations/v37.go b/models/migrations/v37.go
index aac00e84cb..00653a780d 100644
--- a/models/migrations/v37.go
+++ b/models/migrations/v37.go
@@ -7,16 +7,19 @@ package migrations
import (
"html"
- "code.gitea.io/gitea/models"
-
"github.com/go-xorm/xorm"
)
func unescapeUserFullNames(x *xorm.Engine) (err error) {
+ type User struct {
+ ID int64 `xorm:"pk autoincr"`
+ FullName string
+ }
+
const batchSize = 100
for start := 0; ; start += batchSize {
- users := make([]*models.User, 0, batchSize)
- if err := x.Limit(start, batchSize).Find(users); err != nil {
+ users := make([]*User, 0, batchSize)
+ if err := x.Limit(batchSize, start).Find(&users); err != nil {
return err
}
if len(users) == 0 {
@@ -24,7 +27,7 @@ func unescapeUserFullNames(x *xorm.Engine) (err error) {
}
for _, user := range users {
user.FullName = html.UnescapeString(user.FullName)
- if _, err := x.Cols("full_name").Update(user); err != nil {
+ if _, err := x.ID(user.ID).Cols("full_name").Update(user); err != nil {
return err
}
}
diff --git a/models/migrations/v38.go b/models/migrations/v38.go
index c85688db78..6f66484b05 100644
--- a/models/migrations/v38.go
+++ b/models/migrations/v38.go
@@ -5,12 +5,26 @@
package migrations
import (
+ "time"
+
"code.gitea.io/gitea/models"
+ "github.com/go-xorm/core"
"github.com/go-xorm/xorm"
)
func removeCommitsUnitType(x *xorm.Engine) (err error) {
+ // RepoUnit describes all units of a repository
+ type RepoUnit struct {
+ ID int64
+ RepoID int64 `xorm:"INDEX(s)"`
+ Type int `xorm:"INDEX(s)"`
+ Index int
+ Config core.Conversion `xorm:"TEXT"`
+ CreatedUnix int64 `xorm:"INDEX CREATED"`
+ Created time.Time `xorm:"-"`
+ }
+
// Update team unit types
const batchSize = 100
for start := 0; ; start += batchSize {
diff --git a/models/migrations/v39.go b/models/migrations/v39.go
index 41279484e1..95ae0c96a2 100644
--- a/models/migrations/v39.go
+++ b/models/migrations/v39.go
@@ -13,26 +13,37 @@ import (
"github.com/go-xorm/xorm"
)
-// Stopwatch see models/issue_stopwatch.go
-type Stopwatch struct {
- ID int64 `xorm:"pk autoincr"`
- IssueID int64 `xorm:"INDEX"`
- UserID int64 `xorm:"INDEX"`
- Created time.Time `xorm:"-"`
- CreatedUnix int64
-}
+func addTimetracking(x *xorm.Engine) error {
+ // RepoUnit describes all units of a repository
+ type RepoUnit struct {
+ ID int64
+ RepoID int64 `xorm:"INDEX(s)"`
+ Type int `xorm:"INDEX(s)"`
+ Index int
+ Config map[string]interface{} `xorm:"JSON"`
+ CreatedUnix int64 `xorm:"INDEX CREATED"`
+ Created time.Time `xorm:"-"`
+ }
-// TrackedTime see models/issue_tracked_time.go
-type TrackedTime struct {
- ID int64 `xorm:"pk autoincr" json:"id"`
- IssueID int64 `xorm:"INDEX" json:"issue_id"`
- UserID int64 `xorm:"INDEX" json:"user_id"`
- Created time.Time `xorm:"-" json:"created"`
- CreatedUnix int64 `json:"-"`
- Time int64 `json:"time"`
-}
+ // Stopwatch see models/issue_stopwatch.go
+ type Stopwatch struct {
+ ID int64 `xorm:"pk autoincr"`
+ IssueID int64 `xorm:"INDEX"`
+ UserID int64 `xorm:"INDEX"`
+ Created time.Time `xorm:"-"`
+ CreatedUnix int64
+ }
+
+ // TrackedTime see models/issue_tracked_time.go
+ type TrackedTime struct {
+ ID int64 `xorm:"pk autoincr" json:"id"`
+ IssueID int64 `xorm:"INDEX" json:"issue_id"`
+ UserID int64 `xorm:"INDEX" json:"user_id"`
+ Created time.Time `xorm:"-" json:"created"`
+ CreatedUnix int64 `json:"-"`
+ Time int64 `json:"time"`
+ }
-func addTimetracking(x *xorm.Engine) error {
if err := x.Sync2(new(Stopwatch)); err != nil {
return fmt.Errorf("Sync2: %v", err)
}
@@ -40,25 +51,23 @@ func addTimetracking(x *xorm.Engine) error {
return fmt.Errorf("Sync2: %v", err)
}
//Updating existing issue units
- var units []*RepoUnit
- x.Where("type = ?", V16UnitTypeIssues).Find(&units)
+ units := make([]*RepoUnit, 0, 100)
+ err := x.Where("`type` = ?", V16UnitTypeIssues).Find(&units)
+ if err != nil {
+ return fmt.Errorf("Query repo units: %v", err)
+ }
for _, unit := range units {
if unit.Config == nil {
unit.Config = make(map[string]interface{})
}
- changes := false
if _, ok := unit.Config["EnableTimetracker"]; !ok {
unit.Config["EnableTimetracker"] = setting.Service.DefaultEnableTimetracking
- changes = true
}
if _, ok := unit.Config["AllowOnlyContributorsToTrackTime"]; !ok {
unit.Config["AllowOnlyContributorsToTrackTime"] = setting.Service.DefaultAllowOnlyContributorsToTrackTime
- changes = true
}
- if changes {
- if _, err := x.ID(unit.ID).Cols("config").Update(unit); err != nil {
- return err
- }
+ if _, err := x.ID(unit.ID).Cols("config").Update(unit); err != nil {
+ return err
}
}
return nil