You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

tech.go 2.7 kB

2 years ago
2 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. package tech
  2. import (
  3. "code.gitea.io/gitea/models"
  4. "code.gitea.io/gitea/services/repository"
  5. )
  6. func FindTech(opt models.FindTechOpt) ([]*models.TechConvergeBrief, error) {
  7. techList, err := models.FindTech(opt)
  8. if err != nil {
  9. return nil, err
  10. }
  11. r := make([]*models.TechConvergeBrief, len(techList))
  12. for i := 0; i < len(techList); i++ {
  13. r[i] = techList[i].Brief()
  14. }
  15. return r, nil
  16. }
  17. func SearchRepoInfoWithInstitution(opt *models.SearchRepoOpt) ([]*models.RepoWithInstitution, int64, error) {
  18. infos, err := models.GetAvailableRepoConvergeInfo(opt)
  19. if err != nil {
  20. return nil, 0, err
  21. }
  22. repoIds, institutionMap := getRepoIdAndInstitutionMap(infos)
  23. result, err := repository.FindRepos(repository.FindReposOptions{
  24. ListOptions: models.ListOptions{Page: opt.Page, PageSize: opt.PageSize},
  25. Sort: opt.OrderBy,
  26. Keyword: opt.Q,
  27. Topic: opt.Topic,
  28. RepoIds: repoIds,
  29. })
  30. if err != nil {
  31. return nil, 0, err
  32. }
  33. repoResult := make([]*models.RepoWithInstitution, 0, len(result.Repos))
  34. for _, repo := range result.Repos {
  35. repoResult = append(repoResult, &models.RepoWithInstitution{
  36. ID: repo.ID,
  37. OwnerID: repo.OwnerID,
  38. OwnerName: repo.OwnerName,
  39. Name: repo.Name,
  40. Topics: repo.Topics,
  41. Description: repo.Description,
  42. Institution: institutionMap[repo.ID],
  43. UpdatedUnix: repo.UpdatedUnix,
  44. })
  45. }
  46. return repoResult, result.Total, nil
  47. }
  48. func getRepoIdAndInstitutionMap(infos []*models.RepoConvergeInfo) ([]int64, map[int64]string) {
  49. repoIds := make([]int64, 0, len(infos))
  50. institutionMap := make(map[int64]string, 0)
  51. // We only need the keys
  52. for _, info := range infos {
  53. repoIds = append(repoIds, info.RepoID)
  54. institutionMap[info.RepoID] = info.Institution
  55. }
  56. return repoIds, institutionMap
  57. }
  58. func IsValidRepoConvergeExists(repoId, baseInfoId int64) (bool, error) {
  59. list, err := models.GetRepoConverge(models.GetRepoConvergeOpts{
  60. Status: []int{models.TechHide, models.TechShow, models.TechMigrating},
  61. RepoId: repoId,
  62. BaseInfoId: baseInfoId,
  63. })
  64. if err != nil {
  65. return false, err
  66. }
  67. return len(list) > 0, nil
  68. }
  69. func UpdateTechMigrateStatus() error {
  70. migratingRepos, err := models.GetRepoConverge(models.GetRepoConvergeOpts{
  71. Status: []int{models.TechMigrating},
  72. })
  73. if err != nil {
  74. return err
  75. }
  76. for _, r := range migratingRepos {
  77. repo, err := models.GetRepositoryByID(r.RepoID)
  78. if err != nil {
  79. if models.IsErrRepoNotExist(err) {
  80. models.UpdateRepoConvergeStatus(r.ID, models.TechMigrateFailed)
  81. continue
  82. }
  83. continue
  84. }
  85. if repo.Status == models.RepositoryReady {
  86. models.UpdateRepoConvergeStatus(r.ID, models.DefaultTechApprovedStatus)
  87. continue
  88. }
  89. }
  90. return nil
  91. }