@ -20,7 +20,7 @@ import (
"code.gitea.io/gitea/modules/util"
"code.gitea.io/gitea/modules/util"
)
)
func handleCreateError ( owner * models . User , err error , name string ) error {
func handleCreateError ( owner * models . User , err error ) error {
switch {
switch {
case models . IsErrReachLimitOfRepo ( err ) :
case models . IsErrReachLimitOfRepo ( err ) :
return fmt . Errorf ( "You have already reached your limit of %d repositories" , owner . MaxCreationLimit ( ) )
return fmt . Errorf ( "You have already reached your limit of %d repositories" , owner . MaxCreationLimit ( ) )
@ -38,8 +38,8 @@ func handleCreateError(owner *models.User, err error, name string) error {
func runMigrateTask ( t * models . Task ) ( err error ) {
func runMigrateTask ( t * models . Task ) ( err error ) {
defer func ( ) {
defer func ( ) {
if e := recover ( ) ; e != nil {
if e := recover ( ) ; e != nil {
err = fmt . Errorf ( "PANIC whilst trying to do migrate task: %v\nStacktrace: %v " , err , log . Stack ( 2 ) )
err = fmt . Errorf ( "PANIC whilst trying to do migrate task: %v" , e )
log . Critical ( "PANIC during runMigrateTask[%d] by DoerID[%d] to RepoID[%d] for OwnerID[%d]: %v" , t . ID , t . DoerID , t . RepoID , t . OwnerID , err )
log . Critical ( "PANIC during runMigrateTask[%d] by DoerID[%d] to RepoID[%d] for OwnerID[%d]: %v\nStacktrace: %v " , t . ID , t . DoerID , t . RepoID , t . OwnerID , e , log . Stack ( 2 ) )
}
}
if err == nil {
if err == nil {
@ -55,7 +55,8 @@ func runMigrateTask(t *models.Task) (err error) {
t . EndTime = timeutil . TimeStampNow ( )
t . EndTime = timeutil . TimeStampNow ( )
t . Status = structs . TaskStatusFailed
t . Status = structs . TaskStatusFailed
t . Errors = err . Error ( )
t . Errors = err . Error ( )
if err := t . UpdateCols ( "status" , "errors" , "end_time" ) ; err != nil {
t . RepoID = 0
if err := t . UpdateCols ( "status" , "errors" , "repo_id" , "end_time" ) ; err != nil {
log . Error ( "Task UpdateCols failed: %v" , err )
log . Error ( "Task UpdateCols failed: %v" , err )
}
}
@ -66,8 +67,8 @@ func runMigrateTask(t *models.Task) (err error) {
}
}
} ( )
} ( )
if err : = t . LoadRepo ( ) ; err != nil {
if err = t . LoadRepo ( ) ; err != nil {
return err
return
}
}
// if repository is ready, then just finsih the task
// if repository is ready, then just finsih the task
@ -75,33 +76,35 @@ func runMigrateTask(t *models.Task) (err error) {
return nil
return nil
}
}
if err : = t . LoadDoer ( ) ; err != nil {
if err = t . LoadDoer ( ) ; err != nil {
return err
return
}
}
if err : = t . LoadOwner ( ) ; err != nil {
if err = t . LoadOwner ( ) ; err != nil {
return err
return
}
}
t . StartTime = timeutil . TimeStampNow ( )
t . StartTime = timeutil . TimeStampNow ( )
t . Status = structs . TaskStatusRunning
t . Status = structs . TaskStatusRunning
if err : = t . UpdateCols ( "start_time" , "status" ) ; err != nil {
if err = t . UpdateCols ( "start_time" , "status" ) ; err != nil {
return err
return
}
}
var opts * migration . MigrateOptions
var opts * migration . MigrateOptions
opts , err = t . MigrateConfig ( )
opts , err = t . MigrateConfig ( )
if err != nil {
if err != nil {
return err
return
}
}
opts . MigrateToRepoID = t . RepoID
opts . MigrateToRepoID = t . RepoID
repo , err := migrations . MigrateRepository ( graceful . GetManager ( ) . HammerContext ( ) , t . Doer , t . Owner . Name , * opts )
var repo * models . Repository
repo , err = migrations . MigrateRepository ( graceful . GetManager ( ) . HammerContext ( ) , t . Doer , t . Owner . Name , * opts )
if err == nil {
if err == nil {
log . Trace ( "Repository migrated [%d]: %s/%s" , repo . ID , t . Owner . Name , repo . Name )
log . Trace ( "Repository migrated [%d]: %s/%s" , repo . ID , t . Owner . Name , repo . Name )
return nil
return
}
}
if models . IsErrRepoAlreadyExist ( err ) {
if models . IsErrRepoAlreadyExist ( err ) {
return errors . New ( "The repository name is already used" )
err = errors . New ( "The repository name is already used" )
return
}
}
// remoteAddr may contain credentials, so we sanitize it
// remoteAddr may contain credentials, so we sanitize it
@ -113,5 +116,7 @@ func runMigrateTask(t *models.Task) (err error) {
return fmt . Errorf ( "Migration failed: %v" , err . Error ( ) )
return fmt . Errorf ( "Migration failed: %v" , err . Error ( ) )
}
}
return handleCreateError ( t . Owner , err , "MigratePost" )
// do not be tempted to coalesce this line with the return
err = handleCreateError ( t . Owner , err )
return
}
}