2019-10-14 14:10:42 +08:00
// Copyright 2019 The Gitea Authors. All rights reserved.
2022-11-27 13:20:29 -05:00
// SPDX-License-Identifier: MIT
2019-10-14 14:10:42 +08:00
package migrations
import (
2019-12-15 09:51:28 +00:00
"context"
2021-11-10 13:13:16 +08:00
"code.gitea.io/gitea/models/db"
2021-11-28 22:11:58 +08:00
user_model "code.gitea.io/gitea/models/user"
2019-10-14 14:10:42 +08:00
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/structs"
2023-09-09 05:09:23 +08:00
"code.gitea.io/gitea/services/externalaccount"
2019-10-14 14:10:42 +08:00
)
// UpdateMigrationPosterID updates all migrated repositories' issues and comments posterID
2020-05-17 00:31:38 +01:00
func UpdateMigrationPosterID ( ctx context . Context ) error {
2019-10-14 14:10:42 +08:00
for _ , gitService := range structs . SupportedFullGitService {
2019-12-15 09:51:28 +00:00
select {
case <- ctx . Done ( ) :
2020-05-17 00:31:38 +01:00
log . Warn ( "UpdateMigrationPosterID aborted before %s" , gitService . Name ( ) )
2021-11-10 13:13:16 +08:00
return db . ErrCancelledf ( "during UpdateMigrationPosterID before %s" , gitService . Name ( ) )
2019-12-15 09:51:28 +00:00
default :
}
if err := updateMigrationPosterIDByGitService ( ctx , gitService ) ; err != nil {
2019-10-14 14:10:42 +08:00
log . Error ( "updateMigrationPosterIDByGitService failed: %v" , err )
}
}
2020-05-17 00:31:38 +01:00
return nil
2019-10-14 14:10:42 +08:00
}
2019-12-15 09:51:28 +00:00
func updateMigrationPosterIDByGitService ( ctx context . Context , tp structs . GitServiceType ) error {
2019-10-14 14:10:42 +08:00
provider := tp . Name ( )
if len ( provider ) == 0 {
return nil
}
const batchSize = 100
var start int
for {
2019-12-15 09:51:28 +00:00
select {
case <- ctx . Done ( ) :
2020-05-17 00:31:38 +01:00
log . Warn ( "UpdateMigrationPosterIDByGitService(%s) cancelled" , tp . Name ( ) )
2019-12-15 09:51:28 +00:00
return nil
default :
}
2021-11-28 22:11:58 +08:00
users , err := user_model . FindExternalUsersByProvider ( user_model . FindExternalUserOptions {
2019-10-14 14:10:42 +08:00
Provider : provider ,
Start : start ,
Limit : batchSize ,
} )
if err != nil {
return err
}
for _ , user := range users {
2019-12-15 09:51:28 +00:00
select {
case <- ctx . Done ( ) :
2020-05-17 00:31:38 +01:00
log . Warn ( "UpdateMigrationPosterIDByGitService(%s) cancelled" , tp . Name ( ) )
2019-12-15 09:51:28 +00:00
return nil
default :
}
2019-10-16 19:06:28 -07:00
externalUserID := user . ExternalID
2023-09-09 05:09:23 +08:00
if err := externalaccount . UpdateMigrationsByType ( tp , externalUserID , user . UserID ) ; err != nil {
2019-10-14 14:10:42 +08:00
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
}