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

setting.go 1.5KB

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