gitea源码

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