2019-10-14 09:10:42 +03:00
// Copyright 2019 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 (
2019-12-15 12:51:28 +03:00
"context"
2019-10-14 09:10:42 +03:00
"code.gitea.io/gitea/models"
2021-11-10 08:13:16 +03:00
"code.gitea.io/gitea/models/db"
2021-11-28 17:11:58 +03:00
user_model "code.gitea.io/gitea/models/user"
2019-10-14 09:10:42 +03:00
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/structs"
)
// UpdateMigrationPosterID updates all migrated repositories' issues and comments posterID
2020-05-17 02:31:38 +03:00
func UpdateMigrationPosterID ( ctx context . Context ) error {
2019-10-14 09:10:42 +03:00
for _ , gitService := range structs . SupportedFullGitService {
2019-12-15 12:51:28 +03:00
select {
case <- ctx . Done ( ) :
2020-05-17 02:31:38 +03:00
log . Warn ( "UpdateMigrationPosterID aborted before %s" , gitService . Name ( ) )
2021-11-10 08:13:16 +03:00
return db . ErrCancelledf ( "during UpdateMigrationPosterID before %s" , gitService . Name ( ) )
2019-12-15 12:51:28 +03:00
default :
}
if err := updateMigrationPosterIDByGitService ( ctx , gitService ) ; err != nil {
2019-10-14 09:10:42 +03:00
log . Error ( "updateMigrationPosterIDByGitService failed: %v" , err )
}
}
2020-05-17 02:31:38 +03:00
return nil
2019-10-14 09:10:42 +03:00
}
2019-12-15 12:51:28 +03:00
func updateMigrationPosterIDByGitService ( ctx context . Context , tp structs . GitServiceType ) error {
2019-10-14 09:10:42 +03:00
provider := tp . Name ( )
if len ( provider ) == 0 {
return nil
}
const batchSize = 100
var start int
for {
2019-12-15 12:51:28 +03:00
select {
case <- ctx . Done ( ) :
2020-05-17 02:31:38 +03:00
log . Warn ( "UpdateMigrationPosterIDByGitService(%s) cancelled" , tp . Name ( ) )
2019-12-15 12:51:28 +03:00
return nil
default :
}
2021-11-28 17:11:58 +03:00
users , err := user_model . FindExternalUsersByProvider ( user_model . FindExternalUserOptions {
2019-10-14 09:10:42 +03:00
Provider : provider ,
Start : start ,
Limit : batchSize ,
} )
if err != nil {
return err
}
for _ , user := range users {
2019-12-15 12:51:28 +03:00
select {
case <- ctx . Done ( ) :
2020-05-17 02:31:38 +03:00
log . Warn ( "UpdateMigrationPosterIDByGitService(%s) cancelled" , tp . Name ( ) )
2019-12-15 12:51:28 +03:00
return nil
default :
}
2019-10-17 05:06:28 +03:00
externalUserID := user . ExternalID
2019-10-14 09:10:42 +03:00
if err := models . UpdateMigrationsByType ( tp , externalUserID , user . UserID ) ; err != nil {
log . Error ( "UpdateMigrationsByType type %s external user id %v to local user id %v failed: %v" , tp . Name ( ) , user . ExternalID , user . UserID , err )
}
}
if len ( users ) < batchSize {
break
}
start += len ( users )
}
return nil
}