gitea源码

setting.go 1.4KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. // Copyright 2023 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package repository
  4. import (
  5. "context"
  6. "slices"
  7. "code.gitea.io/gitea/models/db"
  8. repo_model "code.gitea.io/gitea/models/repo"
  9. "code.gitea.io/gitea/models/unit"
  10. "code.gitea.io/gitea/modules/log"
  11. actions_service "code.gitea.io/gitea/services/actions"
  12. )
  13. // UpdateRepositoryUnits updates a repository's units
  14. func UpdateRepositoryUnits(ctx context.Context, repo *repo_model.Repository, units []repo_model.RepoUnit, deleteUnitTypes []unit.Type) (err error) {
  15. return db.WithTx(ctx, func(ctx context.Context) error {
  16. // Delete existing settings of units before adding again
  17. for _, u := range units {
  18. deleteUnitTypes = append(deleteUnitTypes, u.Type)
  19. }
  20. if slices.Contains(deleteUnitTypes, unit.TypeActions) {
  21. if err := actions_service.CleanRepoScheduleTasks(ctx, repo); err != nil {
  22. log.Error("CleanRepoScheduleTasks: %v", err)
  23. }
  24. }
  25. for _, u := range units {
  26. if u.Type == unit.TypeActions {
  27. if err := actions_service.DetectAndHandleSchedules(ctx, repo); err != nil {
  28. log.Error("DetectAndHandleSchedules: %v", err)
  29. }
  30. break
  31. }
  32. }
  33. if _, err = db.GetEngine(ctx).Where("repo_id = ?", repo.ID).In("type", deleteUnitTypes).Delete(new(repo_model.RepoUnit)); err != nil {
  34. return err
  35. }
  36. if len(units) > 0 {
  37. if err = db.Insert(ctx, units); err != nil {
  38. return err
  39. }
  40. }
  41. return nil
  42. })
  43. }