summaryrefslogtreecommitdiffstats
path: root/models/migrations
diff options
context:
space:
mode:
authorLauris BH <lauris@nix.lv>2017-12-13 16:52:18 +0200
committerGitHub <noreply@github.com>2017-12-13 16:52:18 +0200
commitc06cc740dea46f3aff58e0eded4208232bb5902d (patch)
tree8f17cf90828fb06133a14cdee2df67ea6db75550 /models/migrations
parentd3c5911ffce8758d020b301e667869aa2e80ce6a (diff)
downloadgitea-c06cc740dea46f3aff58e0eded4208232bb5902d.tar.gz
gitea-c06cc740dea46f3aff58e0eded4208232bb5902d.zip
Reorder migrations, skip errors if running migration again (#3160)
* Reorder migrations, skip errors if running migration again * Rename migration file names to match migration version * Add note about ingored error
Diffstat (limited to 'models/migrations')
-rw-r--r--models/migrations/migrations.go24
-rw-r--r--models/migrations/v39.go85
-rw-r--r--models/migrations/v40.go45
-rw-r--r--models/migrations/v41.go67
-rw-r--r--models/migrations/v42.go57
-rw-r--r--models/migrations/v43.go26
-rw-r--r--models/migrations/v44.go69
-rw-r--r--models/migrations/v45.go6
-rw-r--r--models/migrations/v49.go64
-rw-r--r--models/migrations/v50.go49
-rw-r--r--models/migrations/v51.go42
-rw-r--r--models/migrations/v52.go31
-rw-r--r--models/migrations/v53.go28
13 files changed, 301 insertions, 292 deletions
diff --git a/models/migrations/migrations.go b/models/migrations/migrations.go
index deded2f755..cbd09afabf 100644
--- a/models/migrations/migrations.go
+++ b/models/migrations/migrations.go
@@ -59,6 +59,10 @@ type Version struct {
Version int64
}
+func emptyMigration(x *xorm.Engine) error {
+ return nil
+}
+
// This is a sequence of migrations. Add new migrations to the bottom of the list.
// If you want to "retire" a migration, remove it from the top of the list and
// update minDBVersion accordingly
@@ -127,17 +131,17 @@ var migrations = []Migration{
// v38 -> v39
NewMigration("remove commits and settings unit types", removeCommitsUnitType),
// v39 -> v40
- NewMigration("adds time tracking and stopwatches", addTimetracking),
+ NewMigration("add tags to releases and sync existing repositories", releaseAddColumnIsTagAndSyncTags),
// v40 -> v41
- NewMigration("migrate protected branch struct", migrateProtectedBranchStruct),
+ NewMigration("fix protected branch can push value to false", fixProtectedBranchCanPushValue),
// v41 -> v42
- NewMigration("add default value to user prohibit_login", addDefaultValueToUserProhibitLogin),
+ NewMigration("remove duplicate unit types", removeDuplicateUnitTypes),
// v42 -> v43
- NewMigration("add tags to releases and sync existing repositories", releaseAddColumnIsTagAndSyncTags),
+ NewMigration("empty step", emptyMigration),
// v43 -> v44
- NewMigration("fix protected branch can push value to false", fixProtectedBranchCanPushValue),
+ NewMigration("empty step", emptyMigration),
// v44 -> v45
- NewMigration("remove duplicate unit types", removeDuplicateUnitTypes),
+ NewMigration("empty step", emptyMigration),
// v45 -> v46
NewMigration("remove index column from repo_unit table", removeIndexColumnFromRepoUnitTable),
// v46 -> v47
@@ -147,8 +151,14 @@ var migrations = []Migration{
// v48 -> v49
NewMigration("add repo indexer status", addRepoIndexerStatus),
// v49 -> v50
- NewMigration("add lfs lock table", addLFSLock),
+ NewMigration("adds time tracking and stopwatches", addTimetracking),
// v50 -> v51
+ NewMigration("migrate protected branch struct", migrateProtectedBranchStruct),
+ // v51 -> v52
+ NewMigration("add default value to user prohibit_login", addDefaultValueToUserProhibitLogin),
+ // v52 -> v53
+ NewMigration("add lfs lock table", addLFSLock),
+ // v53 -> v54
NewMigration("add reactions", addReactions),
}
diff --git a/models/migrations/v39.go b/models/migrations/v39.go
index 95ae0c96a2..3547ef1f9e 100644
--- a/models/migrations/v39.go
+++ b/models/migrations/v39.go
@@ -6,69 +6,52 @@ package migrations
import (
"fmt"
- "time"
- "code.gitea.io/gitea/modules/setting"
+ "code.gitea.io/git"
+ "code.gitea.io/gitea/models"
+ "code.gitea.io/gitea/modules/log"
"github.com/go-xorm/xorm"
)
-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:"-"`
- }
-
- // 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
- }
+// ReleaseV39 describes the added field for Release
+type ReleaseV39 struct {
+ IsTag bool `xorm:"NOT NULL DEFAULT false"`
+}
- // 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"`
- }
+// TableName will be invoked by XORM to customrize the table name
+func (*ReleaseV39) TableName() string {
+ return "release"
+}
- if err := x.Sync2(new(Stopwatch)); err != nil {
+func releaseAddColumnIsTagAndSyncTags(x *xorm.Engine) error {
+ if err := x.Sync2(new(ReleaseV39)); err != nil {
return fmt.Errorf("Sync2: %v", err)
}
- if err := x.Sync2(new(TrackedTime)); err != nil {
- return fmt.Errorf("Sync2: %v", err)
- }
- //Updating existing issue 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{})
- }
- if _, ok := unit.Config["EnableTimetracker"]; !ok {
- unit.Config["EnableTimetracker"] = setting.Service.DefaultEnableTimetracking
+
+ // For the sake of SQLite3, we can't use x.Iterate here.
+ offset := 0
+ pageSize := 20
+ for {
+ repos := make([]*models.Repository, 0, pageSize)
+ if err := x.Table("repository").Asc("id").Limit(pageSize, offset).Find(&repos); err != nil {
+ return fmt.Errorf("select repos [offset: %d]: %v", offset, err)
}
- if _, ok := unit.Config["AllowOnlyContributorsToTrackTime"]; !ok {
- unit.Config["AllowOnlyContributorsToTrackTime"] = setting.Service.DefaultAllowOnlyContributorsToTrackTime
+ for _, repo := range repos {
+ gitRepo, err := git.OpenRepository(repo.RepoPath())
+ if err != nil {
+ log.Warn("OpenRepository: %v", err)
+ continue
+ }
+
+ if err = models.SyncReleasesWithTags(repo, gitRepo); err != nil {
+ log.Warn("SyncReleasesWithTags: %v", err)
+ }
}
- if _, err := x.ID(unit.ID).Cols("config").Update(unit); err != nil {
- return err
+ if len(repos) < pageSize {
+ break
}
+ offset += pageSize
}
return nil
}
diff --git a/models/migrations/v40.go b/models/migrations/v40.go
index 324521e0b6..fffe158bf9 100644
--- a/models/migrations/v40.go
+++ b/models/migrations/v40.go
@@ -6,50 +6,21 @@ package migrations
import (
"fmt"
- "time"
-
- "code.gitea.io/gitea/modules/log"
- "code.gitea.io/gitea/modules/setting"
"github.com/go-xorm/xorm"
)
-func migrateProtectedBranchStruct(x *xorm.Engine) error {
+func fixProtectedBranchCanPushValue(x *xorm.Engine) error {
type ProtectedBranch struct {
- ID int64 `xorm:"pk autoincr"`
- RepoID int64 `xorm:"UNIQUE(s)"`
- BranchName string `xorm:"UNIQUE(s)"`
- CanPush bool
- Created time.Time `xorm:"-"`
- CreatedUnix int64
- Updated time.Time `xorm:"-"`
- UpdatedUnix int64
- }
-
- var pbs []ProtectedBranch
- err := x.Find(&pbs)
- if err != nil {
- return err
- }
-
- for _, pb := range pbs {
- if pb.CanPush {
- if _, err = x.ID(pb.ID).Delete(new(ProtectedBranch)); err != nil {
- return err
- }
- }
+ CanPush bool `xorm:"NOT NULL DEFAULT false"`
}
- switch {
- case setting.UseSQLite3:
- log.Warn("Unable to drop columns in SQLite")
- case setting.UseMySQL, setting.UsePostgreSQL, setting.UseMSSQL, setting.UseTiDB:
- if _, err := x.Exec("ALTER TABLE protected_branch DROP COLUMN can_push"); err != nil {
- return fmt.Errorf("DROP COLUMN can_push: %v", err)
- }
- default:
- log.Fatal(4, "Unrecognized DB")
+ if err := x.Sync2(new(ProtectedBranch)); err != nil {
+ return fmt.Errorf("Sync2: %v", err)
}
- return nil
+ _, err := x.Cols("can_push").Update(&ProtectedBranch{
+ CanPush: false,
+ })
+ return err
}
diff --git a/models/migrations/v41.go b/models/migrations/v41.go
index 89763c3afe..4de3ad4e99 100644
--- a/models/migrations/v41.go
+++ b/models/migrations/v41.go
@@ -7,36 +7,63 @@ package migrations
import (
"fmt"
- "code.gitea.io/gitea/models"
-
"github.com/go-xorm/xorm"
)
-func addDefaultValueToUserProhibitLogin(x *xorm.Engine) (err error) {
- user := &models.User{
- ProhibitLogin: false,
+func removeDuplicateUnitTypes(x *xorm.Engine) error {
+ // RepoUnit describes all units of a repository
+ type RepoUnit struct {
+ RepoID int64
+ Type int
+ }
+
+ // Enumerate all the unit types
+ const (
+ UnitTypeCode = iota + 1 // 1 code
+ UnitTypeIssues // 2 issues
+ UnitTypePullRequests // 3 PRs
+ UnitTypeReleases // 4 Releases
+ UnitTypeWiki // 5 Wiki
+ UnitTypeExternalWiki // 6 ExternalWiki
+ UnitTypeExternalTracker // 7 ExternalTracker
+ )
+
+ var externalIssueRepoUnits []RepoUnit
+ err := x.Where("type = ?", UnitTypeExternalTracker).Find(&externalIssueRepoUnits)
+ if err != nil {
+ return fmt.Errorf("Query repositories: %v", err)
+ }
+
+ var externalWikiRepoUnits []RepoUnit
+ err = x.Where("type = ?", UnitTypeExternalWiki).Find(&externalWikiRepoUnits)
+ if err != nil {
+ return fmt.Errorf("Query repositories: %v", err)
}
- if _, err := x.Where("`prohibit_login` IS NULL").Cols("prohibit_login").Update(user); err != nil {
+ sess := x.NewSession()
+ defer sess.Close()
+
+ if err := sess.Begin(); err != nil {
return err
}
- dialect := x.Dialect().DriverName()
-
- switch dialect {
- case "mysql":
- _, err = x.Exec("ALTER TABLE user MODIFY `prohibit_login` tinyint(1) NOT NULL DEFAULT 0")
- case "postgres":
- _, err = x.Exec("ALTER TABLE \"user\" ALTER COLUMN `prohibit_login` SET NOT NULL, ALTER COLUMN `prohibit_login` SET DEFAULT false")
- case "mssql":
- // xorm already set DEFAULT 0 for data type BIT in mssql
- _, err = x.Exec(`ALTER TABLE [user] ALTER COLUMN "prohibit_login" BIT NOT NULL`)
- case "sqlite3":
+ for _, repoUnit := range externalIssueRepoUnits {
+ if _, err = sess.Delete(&RepoUnit{
+ RepoID: repoUnit.RepoID,
+ Type: UnitTypeIssues,
+ }); err != nil {
+ return fmt.Errorf("Delete repo unit: %v", err)
+ }
}
- if err != nil {
- return fmt.Errorf("Error changing user prohibit_login column definition: %v", err)
+ for _, repoUnit := range externalWikiRepoUnits {
+ if _, err = sess.Delete(&RepoUnit{
+ RepoID: repoUnit.RepoID,
+ Type: UnitTypeWiki,
+ }); err != nil {
+ return fmt.Errorf("Delete repo unit: %v", err)
+ }
}
- return err
+ return sess.Commit()
}
diff --git a/models/migrations/v42.go b/models/migrations/v42.go
deleted file mode 100644
index 3547ef1f9e..0000000000
--- a/models/migrations/v42.go
+++ /dev/null
@@ -1,57 +0,0 @@
-// Copyright 2017 The Gitea Authors. All rights reserved.
-// Use of this source code is governed by a MIT-style
-// license that can be found in the LICENSE file.
-
-package migrations
-
-import (
- "fmt"
-
- "code.gitea.io/git"
- "code.gitea.io/gitea/models"
- "code.gitea.io/gitea/modules/log"
-
- "github.com/go-xorm/xorm"
-)
-
-// ReleaseV39 describes the added field for Release
-type ReleaseV39 struct {
- IsTag bool `xorm:"NOT NULL DEFAULT false"`
-}
-
-// TableName will be invoked by XORM to customrize the table name
-func (*ReleaseV39) TableName() string {
- return "release"
-}
-
-func releaseAddColumnIsTagAndSyncTags(x *xorm.Engine) error {
- if err := x.Sync2(new(ReleaseV39)); err != nil {
- return fmt.Errorf("Sync2: %v", err)
- }
-
- // For the sake of SQLite3, we can't use x.Iterate here.
- offset := 0
- pageSize := 20
- for {
- repos := make([]*models.Repository, 0, pageSize)
- if err := x.Table("repository").Asc("id").Limit(pageSize, offset).Find(&repos); err != nil {
- return fmt.Errorf("select repos [offset: %d]: %v", offset, err)
- }
- for _, repo := range repos {
- gitRepo, err := git.OpenRepository(repo.RepoPath())
- if err != nil {
- log.Warn("OpenRepository: %v", err)
- continue
- }
-
- if err = models.SyncReleasesWithTags(repo, gitRepo); err != nil {
- log.Warn("SyncReleasesWithTags: %v", err)
- }
- }
- if len(repos) < pageSize {
- break
- }
- offset += pageSize
- }
- return nil
-}
diff --git a/models/migrations/v43.go b/models/migrations/v43.go
deleted file mode 100644
index fffe158bf9..0000000000
--- a/models/migrations/v43.go
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright 2017 The Gitea Authors. All rights reserved.
-// Use of this source code is governed by a MIT-style
-// license that can be found in the LICENSE file.
-
-package migrations
-
-import (
- "fmt"
-
- "github.com/go-xorm/xorm"
-)
-
-func fixProtectedBranchCanPushValue(x *xorm.Engine) error {
- type ProtectedBranch struct {
- CanPush bool `xorm:"NOT NULL DEFAULT false"`
- }
-
- if err := x.Sync2(new(ProtectedBranch)); err != nil {
- return fmt.Errorf("Sync2: %v", err)
- }
-
- _, err := x.Cols("can_push").Update(&ProtectedBranch{
- CanPush: false,
- })
- return err
-}
diff --git a/models/migrations/v44.go b/models/migrations/v44.go
deleted file mode 100644
index 4de3ad4e99..0000000000
--- a/models/migrations/v44.go
+++ /dev/null
@@ -1,69 +0,0 @@
-// Copyright 2017 The Gitea Authors. All rights reserved.
-// Use of this source code is governed by a MIT-style
-// license that can be found in the LICENSE file.
-
-package migrations
-
-import (
- "fmt"
-
- "github.com/go-xorm/xorm"
-)
-
-func removeDuplicateUnitTypes(x *xorm.Engine) error {
- // RepoUnit describes all units of a repository
- type RepoUnit struct {
- RepoID int64
- Type int
- }
-
- // Enumerate all the unit types
- const (
- UnitTypeCode = iota + 1 // 1 code
- UnitTypeIssues // 2 issues
- UnitTypePullRequests // 3 PRs
- UnitTypeReleases // 4 Releases
- UnitTypeWiki // 5 Wiki
- UnitTypeExternalWiki // 6 ExternalWiki
- UnitTypeExternalTracker // 7 ExternalTracker
- )
-
- var externalIssueRepoUnits []RepoUnit
- err := x.Where("type = ?", UnitTypeExternalTracker).Find(&externalIssueRepoUnits)
- if err != nil {
- return fmt.Errorf("Query repositories: %v", err)
- }
-
- var externalWikiRepoUnits []RepoUnit
- err = x.Where("type = ?", UnitTypeExternalWiki).Find(&externalWikiRepoUnits)
- if err != nil {
- return fmt.Errorf("Query repositories: %v", err)
- }
-
- sess := x.NewSession()
- defer sess.Close()
-
- if err := sess.Begin(); err != nil {
- return err
- }
-
- for _, repoUnit := range externalIssueRepoUnits {
- if _, err = sess.Delete(&RepoUnit{
- RepoID: repoUnit.RepoID,
- Type: UnitTypeIssues,
- }); err != nil {
- return fmt.Errorf("Delete repo unit: %v", err)
- }
- }
-
- for _, repoUnit := range externalWikiRepoUnits {
- if _, err = sess.Delete(&RepoUnit{
- RepoID: repoUnit.RepoID,
- Type: UnitTypeWiki,
- }); err != nil {
- return fmt.Errorf("Delete repo unit: %v", err)
- }
- }
-
- return sess.Commit()
-}
diff --git a/models/migrations/v45.go b/models/migrations/v45.go
index 7a85908195..9ad27cf6db 100644
--- a/models/migrations/v45.go
+++ b/models/migrations/v45.go
@@ -5,10 +5,9 @@
package migrations
import (
- "fmt"
-
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/setting"
+
"github.com/go-xorm/xorm"
)
@@ -18,7 +17,8 @@ func removeIndexColumnFromRepoUnitTable(x *xorm.Engine) (err error) {
log.Warn("Unable to drop columns in SQLite")
case setting.UseMySQL, setting.UsePostgreSQL, setting.UseMSSQL, setting.UseTiDB:
if _, err := x.Exec("ALTER TABLE repo_unit DROP COLUMN `index`"); err != nil {
- return fmt.Errorf("DROP COLUMN index: %v", err)
+ // Ignoring this error in case we run this migration second time (after migration reordering)
+ log.Warn("DROP COLUMN index: %v", err)
}
default:
log.Fatal(4, "Unrecognized DB")
diff --git a/models/migrations/v49.go b/models/migrations/v49.go
index ab57d27de0..9e98de5cf2 100644
--- a/models/migrations/v49.go
+++ b/models/migrations/v49.go
@@ -8,24 +8,66 @@ import (
"fmt"
"time"
- "code.gitea.io/gitea/models"
+ "code.gitea.io/gitea/modules/setting"
"github.com/go-xorm/xorm"
)
-func addLFSLock(x *xorm.Engine) error {
- // LFSLock see models/lfs_lock.go
- type LFSLock struct {
- ID int64 `xorm:"pk autoincr"`
- RepoID int64 `xorm:"INDEX NOT NULL"`
- Owner *models.User `xorm:"-"`
- OwnerID int64 `xorm:"INDEX NOT NULL"`
- Path string `xorm:"TEXT"`
- Created time.Time `xorm:"created"`
+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)"`
+ Config map[string]interface{} `xorm:"JSON"`
+ CreatedUnix int64 `xorm:"INDEX CREATED"`
+ Created time.Time `xorm:"-"`
}
- if err := x.Sync2(new(LFSLock)); err != nil {
+ // 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"`
+ }
+
+ if err := x.Sync2(new(Stopwatch)); err != nil {
return fmt.Errorf("Sync2: %v", err)
}
+ if err := x.Sync2(new(TrackedTime)); err != nil {
+ return fmt.Errorf("Sync2: %v", err)
+ }
+ //Updating existing issue 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{})
+ }
+ if _, ok := unit.Config["EnableTimetracker"]; !ok {
+ unit.Config["EnableTimetracker"] = setting.Service.DefaultEnableTimetracking
+ }
+ if _, ok := unit.Config["AllowOnlyContributorsToTrackTime"]; !ok {
+ unit.Config["AllowOnlyContributorsToTrackTime"] = setting.Service.DefaultAllowOnlyContributorsToTrackTime
+ }
+ if _, err := x.ID(unit.ID).Cols("config").Update(unit); err != nil {
+ return err
+ }
+ }
return nil
}
diff --git a/models/migrations/v50.go b/models/migrations/v50.go
index 7437cace25..4ed8f05157 100644
--- a/models/migrations/v50.go
+++ b/models/migrations/v50.go
@@ -5,24 +5,51 @@
package migrations
import (
- "fmt"
+ "time"
+
+ "code.gitea.io/gitea/modules/log"
+ "code.gitea.io/gitea/modules/setting"
"github.com/go-xorm/xorm"
)
-func addReactions(x *xorm.Engine) error {
- // Reaction see models/issue_reaction.go
- type Reaction struct {
+func migrateProtectedBranchStruct(x *xorm.Engine) error {
+ type ProtectedBranch struct {
ID int64 `xorm:"pk autoincr"`
- Type string `xorm:"INDEX UNIQUE(s) NOT NULL"`
- IssueID int64 `xorm:"INDEX UNIQUE(s) NOT NULL"`
- CommentID int64 `xorm:"INDEX UNIQUE(s)"`
- UserID int64 `xorm:"INDEX UNIQUE(s) NOT NULL"`
- CreatedUnix int64 `xorm:"INDEX created"`
+ RepoID int64 `xorm:"UNIQUE(s)"`
+ BranchName string `xorm:"UNIQUE(s)"`
+ CanPush bool
+ Created time.Time `xorm:"-"`
+ CreatedUnix int64
+ Updated time.Time `xorm:"-"`
+ UpdatedUnix int64
+ }
+
+ var pbs []ProtectedBranch
+ err := x.Find(&pbs)
+ if err != nil {
+ return err
}
- if err := x.Sync2(new(Reaction)); err != nil {
- return fmt.Errorf("Sync2: %v", err)
+ for _, pb := range pbs {
+ if pb.CanPush {
+ if _, err = x.ID(pb.ID).Delete(new(ProtectedBranch)); err != nil {
+ return err
+ }
+ }
}
+
+ switch {
+ case setting.UseSQLite3:
+ log.Warn("Unable to drop columns in SQLite")
+ case setting.UseMySQL, setting.UsePostgreSQL, setting.UseMSSQL, setting.UseTiDB:
+ if _, err := x.Exec("ALTER TABLE protected_branch DROP COLUMN can_push"); err != nil {
+ // Ignoring this error in case we run this migration second time (after migration reordering)
+ log.Warn("DROP COLUMN can_push (skipping): %v", err)
+ }
+ default:
+ log.Fatal(4, "Unrecognized DB")
+ }
+
return nil
}
diff --git a/models/migrations/v51.go b/models/migrations/v51.go
new file mode 100644
index 0000000000..85e903bbe7
--- /dev/null
+++ b/models/migrations/v51.go
@@ -0,0 +1,42 @@
+// Copyright 2017 The Gitea Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+package migrations
+
+import (
+ "code.gitea.io/gitea/models"
+ "code.gitea.io/gitea/modules/log"
+
+ "github.com/go-xorm/xorm"
+)
+
+func addDefaultValueToUserProhibitLogin(x *xorm.Engine) (err error) {
+ user := &models.User{
+ ProhibitLogin: false,
+ }
+
+ if _, err := x.Where("`prohibit_login` IS NULL").Cols("prohibit_login").Update(user); err != nil {
+ return err
+ }
+
+ dialect := x.Dialect().DriverName()
+
+ switch dialect {
+ case "mysql":
+ _, err = x.Exec("ALTER TABLE user MODIFY `prohibit_login` tinyint(1) NOT NULL DEFAULT 0")
+ case "postgres":
+ _, err = x.Exec("ALTER TABLE \"user\" ALTER COLUMN `prohibit_login` SET NOT NULL, ALTER COLUMN `prohibit_login` SET DEFAULT false")
+ case "mssql":
+ // xorm already set DEFAULT 0 for data type BIT in mssql
+ _, err = x.Exec(`ALTER TABLE [user] ALTER COLUMN "prohibit_login" BIT NOT NULL`)
+ case "sqlite3":
+ }
+
+ if err != nil {
+ // Ignoring this error in case we run this migration second time (after migration reordering)
+ log.Warn("Error changing user prohibit_login column definition (skipping): %v", err)
+ }
+
+ return nil
+}
diff --git a/models/migrations/v52.go b/models/migrations/v52.go
new file mode 100644
index 0000000000..ab57d27de0
--- /dev/null
+++ b/models/migrations/v52.go
@@ -0,0 +1,31 @@
+// Copyright 2017 The Gitea Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+package migrations
+
+import (
+ "fmt"
+ "time"
+
+ "code.gitea.io/gitea/models"
+
+ "github.com/go-xorm/xorm"
+)
+
+func addLFSLock(x *xorm.Engine) error {
+ // LFSLock see models/lfs_lock.go
+ type LFSLock struct {
+ ID int64 `xorm:"pk autoincr"`
+ RepoID int64 `xorm:"INDEX NOT NULL"`
+ Owner *models.User `xorm:"-"`
+ OwnerID int64 `xorm:"INDEX NOT NULL"`
+ Path string `xorm:"TEXT"`
+ Created time.Time `xorm:"created"`
+ }
+
+ if err := x.Sync2(new(LFSLock)); err != nil {
+ return fmt.Errorf("Sync2: %v", err)
+ }
+ return nil
+}
diff --git a/models/migrations/v53.go b/models/migrations/v53.go
new file mode 100644
index 0000000000..7437cace25
--- /dev/null
+++ b/models/migrations/v53.go
@@ -0,0 +1,28 @@
+// Copyright 2017 The Gitea Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+package migrations
+
+import (
+ "fmt"
+
+ "github.com/go-xorm/xorm"
+)
+
+func addReactions(x *xorm.Engine) error {
+ // Reaction see models/issue_reaction.go
+ type Reaction struct {
+ ID int64 `xorm:"pk autoincr"`
+ Type string `xorm:"INDEX UNIQUE(s) NOT NULL"`
+ IssueID int64 `xorm:"INDEX UNIQUE(s) NOT NULL"`
+ CommentID int64 `xorm:"INDEX UNIQUE(s)"`
+ UserID int64 `xorm:"INDEX UNIQUE(s) NOT NULL"`
+ CreatedUnix int64 `xorm:"INDEX created"`
+ }
+
+ if err := x.Sync2(new(Reaction)); err != nil {
+ return fmt.Errorf("Sync2: %v", err)
+ }
+ return nil
+}