code.gitea.io/gitea@v1.22.3/services/migrations/update.go (about) 1 // Copyright 2019 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package migrations 5 6 import ( 7 "context" 8 9 "code.gitea.io/gitea/models/db" 10 user_model "code.gitea.io/gitea/models/user" 11 "code.gitea.io/gitea/modules/log" 12 "code.gitea.io/gitea/modules/structs" 13 "code.gitea.io/gitea/services/externalaccount" 14 ) 15 16 // UpdateMigrationPosterID updates all migrated repositories' issues and comments posterID 17 func UpdateMigrationPosterID(ctx context.Context) error { 18 for _, gitService := range structs.SupportedFullGitService { 19 select { 20 case <-ctx.Done(): 21 log.Warn("UpdateMigrationPosterID aborted before %s", gitService.Name()) 22 return db.ErrCancelledf("during UpdateMigrationPosterID before %s", gitService.Name()) 23 default: 24 } 25 if err := updateMigrationPosterIDByGitService(ctx, gitService); err != nil { 26 log.Error("updateMigrationPosterIDByGitService failed: %v", err) 27 } 28 } 29 return nil 30 } 31 32 func updateMigrationPosterIDByGitService(ctx context.Context, tp structs.GitServiceType) error { 33 provider := tp.Name() 34 if len(provider) == 0 { 35 return nil 36 } 37 38 const batchSize = 100 39 for page := 0; ; page++ { 40 select { 41 case <-ctx.Done(): 42 log.Warn("UpdateMigrationPosterIDByGitService(%s) cancelled", tp.Name()) 43 return nil 44 default: 45 } 46 47 users, err := db.Find[user_model.ExternalLoginUser](ctx, user_model.FindExternalUserOptions{ 48 ListOptions: db.ListOptions{ 49 PageSize: batchSize, 50 Page: page, 51 }, 52 Provider: provider, 53 OrderBy: "login_source_id ASC, external_id ASC", 54 }) 55 if err != nil { 56 return err 57 } 58 59 for _, user := range users { 60 select { 61 case <-ctx.Done(): 62 log.Warn("UpdateMigrationPosterIDByGitService(%s) cancelled", tp.Name()) 63 return nil 64 default: 65 } 66 externalUserID := user.ExternalID 67 if err := externalaccount.UpdateMigrationsByType(ctx, tp, externalUserID, user.UserID); err != nil { 68 log.Error("UpdateMigrationsByType type %s external user id %v to local user id %v failed: %v", tp.Name(), user.ExternalID, user.UserID, err) 69 } 70 } 71 72 if len(users) < batchSize { 73 break 74 } 75 } 76 return nil 77 }