@ -5,9 +5,6 @@
package migrations
package migrations
import (
import (
"code.gitea.io/gitea/models"
"code.gitea.io/gitea/modules/migrations/base"
"code.gitea.io/gitea/modules/structs"
"code.gitea.io/gitea/modules/util"
"code.gitea.io/gitea/modules/util"
jsoniter "github.com/json-iterator/go"
jsoniter "github.com/json-iterator/go"
@ -16,20 +13,38 @@ import (
)
)
func deleteMigrationCredentials ( x * xorm . Engine ) ( err error ) {
func deleteMigrationCredentials ( x * xorm . Engine ) ( err error ) {
// Task represents a task
type Task struct {
ID int64
DoerID int64 ` xorm:"index" ` // operator
OwnerID int64 ` xorm:"index" ` // repo owner id, when creating, the repoID maybe zero
RepoID int64 ` xorm:"index" `
Type int
Status int ` xorm:"index" `
StartTime int64
EndTime int64
PayloadContent string ` xorm:"TEXT" `
Errors string ` xorm:"TEXT" ` // if task failed, saved the error reason
Created int64 ` xorm:"created" `
}
const TaskTypeMigrateRepo = 0
const TaskStatusStopped = 2
const batchSize = 100
const batchSize = 100
// only match migration tasks, that are not pending or running
// only match migration tasks, that are not pending or running
cond := builder . Eq {
cond := builder . Eq {
"type" : structs . TaskTypeMigrateRepo ,
"type" : TaskTypeMigrateRepo ,
} . And ( builder . Gte {
} . And ( builder . Gte {
"status" : structs . TaskStatusStopped ,
"status" : TaskStatusStopped ,
} )
} )
sess := x . NewSession ( )
sess := x . NewSession ( )
defer sess . Close ( )
defer sess . Close ( )
for start := 0 ; ; start += batchSize {
for start := 0 ; ; start += batchSize {
tasks := make ( [ ] * models . Task , 0 , batchSize )
tasks := make ( [ ] * Task , 0 , batchSize )
if err = sess . Limit ( batchSize , start ) . Where ( cond , 0 ) . Find ( & tasks ) ; err != nil {
if err = sess . Limit ( batchSize , start ) . Where ( cond , 0 ) . Find ( & tasks ) ; err != nil {
return
return
}
}
@ -55,7 +70,41 @@ func deleteMigrationCredentials(x *xorm.Engine) (err error) {
}
}
func removeCredentials ( payload string ) ( string , error ) {
func removeCredentials ( payload string ) ( string , error ) {
var opts base . MigrateOptions
// MigrateOptions defines the way a repository gets migrated
// this is for internal usage by migrations module and func who interact with it
type MigrateOptions struct {
// required: true
CloneAddr string ` json:"clone_addr" binding:"Required" `
CloneAddrEncrypted string ` json:"clone_addr_encrypted,omitempty" `
AuthUsername string ` json:"auth_username" `
AuthPassword string ` json:"-" `
AuthPasswordEncrypted string ` json:"auth_password_encrypted,omitempty" `
AuthToken string ` json:"-" `
AuthTokenEncrypted string ` json:"auth_token_encrypted,omitempty" `
// required: true
UID int ` json:"uid" binding:"Required" `
// required: true
RepoName string ` json:"repo_name" binding:"Required" `
Mirror bool ` json:"mirror" `
LFS bool ` json:"lfs" `
LFSEndpoint string ` json:"lfs_endpoint" `
Private bool ` json:"private" `
Description string ` json:"description" `
OriginalURL string
GitServiceType int
Wiki bool
Issues bool
Milestones bool
Labels bool
Releases bool
Comments bool
PullRequests bool
ReleaseAssets bool
MigrateToRepoID int64
MirrorInterval string ` json:"mirror_interval" `
}
var opts MigrateOptions
json := jsoniter . ConfigCompatibleWithStandardLibrary
json := jsoniter . ConfigCompatibleWithStandardLibrary
err := json . Unmarshal ( [ ] byte ( payload ) , & opts )
err := json . Unmarshal ( [ ] byte ( payload ) , & opts )
if err != nil {
if err != nil {