summaryrefslogtreecommitdiffstats
path: root/models/migrations
diff options
context:
space:
mode:
authorJonas <cez81@users.noreply.github.com>2017-04-08 17:27:26 +0200
committerLunny Xiao <xiaolunwen@gmail.com>2017-04-08 23:27:26 +0800
commit54f0293f0ab73f357f545f8e05d16f9b254aba5e (patch)
treeb95f86dd93e7c74cada06a919d7f790c2ca1d083 /models/migrations
parentedbb9eefd6c12d6c67bf864539a51f5a09c7d670 (diff)
downloadgitea-54f0293f0ab73f357f545f8e05d16f9b254aba5e.tar.gz
gitea-54f0293f0ab73f357f545f8e05d16f9b254aba5e.zip
Mirror sync interval specified as duration string (#1407)
* Sync interval specifed as duration string * Changed mirror interval text * make fmt * Add MinInterval for mirror sync * Use duration internally * Changed min default to 10m * make fmt * Incorrect default * Removed defaults in MustDuration() * Add Mirror interval migration * Default values corrected * Use transaction during migration * Change http 500 to page with error message * Cleanup session.commit()
Diffstat (limited to 'models/migrations')
-rw-r--r--models/migrations/migrations.go2
-rw-r--r--models/migrations/v27.go56
2 files changed, 58 insertions, 0 deletions
diff --git a/models/migrations/migrations.go b/models/migrations/migrations.go
index 07a56e879b..fee0fef79c 100644
--- a/models/migrations/migrations.go
+++ b/models/migrations/migrations.go
@@ -102,6 +102,8 @@ var migrations = []Migration{
NewMigration("add show field in user openid table", addUserOpenIDShow),
// v26 -> v27
NewMigration("generate and migrate repo and wiki Git hooks", generateAndMigrateGitHookChains),
+ // v27 -> v28
+ NewMigration("change mirror interval from hours to time.Duration", convertIntervalToDuration),
}
// Migrate database to current version
diff --git a/models/migrations/v27.go b/models/migrations/v27.go
new file mode 100644
index 0000000000..0ac9553725
--- /dev/null
+++ b/models/migrations/v27.go
@@ -0,0 +1,56 @@
+// Copyright 2017 Gitea. 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"
+
+ "github.com/go-xorm/xorm"
+)
+
+func convertIntervalToDuration(x *xorm.Engine) (err error) {
+ type Repository struct {
+ ID int64
+ OwnerID int64
+ Name string
+ }
+ type Mirror struct {
+ ID int64 `xorm:"pk autoincr"`
+ RepoID int64 `xorm:"INDEX"`
+ Repo *Repository `xorm:"-"`
+ Interval time.Duration
+ EnablePrune bool `xorm:"NOT NULL DEFAULT true"`
+
+ Updated time.Time `xorm:"-"`
+ UpdatedUnix int64 `xorm:"INDEX"`
+ NextUpdate time.Time `xorm:"-"`
+ NextUpdateUnix int64 `xorm:"INDEX"`
+
+ address string `xorm:"-"`
+ }
+
+ sess := x.NewSession()
+ defer sess.Close()
+
+ if err := sess.Begin(); err != nil {
+ return err
+ }
+
+ var mirrors []Mirror
+ err = sess.Table("mirror").Select("*").Find(&mirrors)
+ if err != nil {
+ return fmt.Errorf("Query repositories: %v", err)
+ }
+ for _, mirror := range mirrors {
+ mirror.Interval = mirror.Interval * time.Hour
+ _, err := sess.Id(mirror.ID).Cols("interval").Update(mirror)
+ if err != nil {
+ return fmt.Errorf("update mirror interval failed: %v", err)
+ }
+ }
+
+ return sess.Commit()
+}