2017-04-08 18:27:26 +03:00
// 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"
2017-04-30 05:08:16 +03:00
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/setting"
2017-04-08 18:27:26 +03:00
"github.com/go-xorm/xorm"
)
func convertIntervalToDuration ( x * xorm . Engine ) ( err error ) {
type Repository struct {
ID int64
OwnerID int64
Name string
}
type Mirror struct {
2017-04-30 05:08:16 +03:00
ID int64 ` xorm:"pk autoincr" `
RepoID int64 ` xorm:"INDEX" `
Repo * Repository ` xorm:"-" `
Interval time . Duration
2017-04-08 18:27:26 +03:00
}
sess := x . NewSession ( )
defer sess . Close ( )
if err := sess . Begin ( ) ; err != nil {
return err
}
2017-04-30 05:08:16 +03:00
dialect := x . Dialect ( ) . DriverName ( )
switch dialect {
case "mysql" :
_ , err = sess . Exec ( "ALTER TABLE mirror MODIFY `interval` BIGINT" )
case "postgres" :
_ , err = sess . Exec ( "ALTER TABLE mirror ALTER COLUMN \"interval\" SET DATA TYPE bigint" )
case "tidb" :
_ , err = sess . Exec ( "ALTER TABLE mirror MODIFY `interval` BIGINT" )
case "mssql" :
_ , err = sess . Exec ( "ALTER TABLE mirror ALTER COLUMN \"interval\" BIGINT" )
case "sqlite3" :
}
if err != nil {
return fmt . Errorf ( "Error changing mirror interval column type: %v" , err )
}
2017-04-08 18:27:26 +03:00
var mirrors [ ] Mirror
err = sess . Table ( "mirror" ) . Select ( "*" ) . Find ( & mirrors )
if err != nil {
return fmt . Errorf ( "Query repositories: %v" , err )
}
for _ , mirror := range mirrors {
2019-06-12 22:41:28 +03:00
mirror . Interval *= time . Hour
2017-04-30 05:08:16 +03:00
if mirror . Interval < setting . Mirror . MinInterval {
log . Info ( "Mirror interval less than Mirror.MinInterval, setting default interval: repo id %v" , mirror . RepoID )
mirror . Interval = setting . Mirror . DefaultInterval
}
log . Debug ( "Mirror interval set to %v for repo id %v" , mirror . Interval , mirror . RepoID )
2019-06-12 22:41:28 +03:00
_ , err := sess . ID ( mirror . ID ) . Cols ( "interval" ) . Update ( mirror )
2017-04-08 18:27:26 +03:00
if err != nil {
return fmt . Errorf ( "update mirror interval failed: %v" , err )
}
}
return sess . Commit ( )
}