From 33685d4596bfb3dd87c67178f7410bf3a1cbbb31 Mon Sep 17 00:00:00 2001 From: David Schneiderbauer Date: Sun, 8 Oct 2017 13:08:18 +0200 Subject: [PATCH 1/3] 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 * Fix migration from Gogs * Refactor code * add error check * Additiomal fixes for migrations * Add back nil check --- models/migrations/v15.go | 20 +++++++------------- models/migrations/v16.go | 6 +++--- models/migrations/v37.go | 13 ++++++++----- 3 files changed, 18 insertions(+), 21 deletions(-) diff --git a/models/migrations/v15.go b/models/migrations/v15.go index e29067c980027..3492a7190b3cb 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 f14b196f2cfe6..ea3b0a762dc95 100644 --- a/models/migrations/v16.go +++ b/models/migrations/v16.go @@ -33,9 +33,9 @@ func addUnitsToTables(x *xorm.Engine) error { RepoID int64 `xorm:"INDEX(s)"` Type int `xorm:"INDEX(s)"` Index int - Config map[string]string `xorm:"JSON"` - CreatedUnix int64 `xorm:"INDEX CREATED"` - Created time.Time `xorm:"-"` + Config map[string]interface{} `xorm:"JSON"` + CreatedUnix int64 `xorm:"INDEX CREATED"` + Created time.Time `xorm:"-"` } // Repo describes a repository diff --git a/models/migrations/v37.go b/models/migrations/v37.go index aac00e84cbf0c..00653a780d4ae 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 } } From 2fb3ef836e323a2612ba4d065a5755af8dfec6bd Mon Sep 17 00:00:00 2001 From: David Schneiderbauer Date: Sun, 8 Oct 2017 14:20:25 +0200 Subject: [PATCH 2/3] replace deprecated .Id with .ID Signed-off-by: David Schneiderbauer --- models/migrations/v38.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/models/migrations/v38.go b/models/migrations/v38.go index 216d49935dcee..6f66484b056ae 100644 --- a/models/migrations/v38.go +++ b/models/migrations/v38.go @@ -47,7 +47,7 @@ func removeCommitsUnitType(x *xorm.Engine) (err error) { } } team.UnitTypes = ut - if _, err := x.Id(team.ID).Cols("unit_types").Update(team); err != nil { + if _, err := x.ID(team.ID).Cols("unit_types").Update(team); err != nil { return err } } From 3559d28fa67be7755f37628289395f250e75d223 Mon Sep 17 00:00:00 2001 From: David Schneiderbauer Date: Sun, 8 Oct 2017 14:23:35 +0200 Subject: [PATCH 3/3] change string map to interface map Signed-off-by: David Schneiderbauer --- models/migrations/v16.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/models/migrations/v16.go b/models/migrations/v16.go index ea3b0a762dc95..f6fb76da5b0b7 100644 --- a/models/migrations/v16.go +++ b/models/migrations/v16.go @@ -95,7 +95,7 @@ func addUnitsToTables(x *xorm.Engine) error { continue } - var config = make(map[string]string) + var config = make(map[string]interface{}) switch i { case V16UnitTypeExternalTracker: config["ExternalTrackerURL"] = repo.ExternalTrackerURL