Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

package_cleanup_rule.go 3.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. // Copyright 2022 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package packages
  4. import (
  5. "context"
  6. "errors"
  7. "fmt"
  8. "regexp"
  9. "code.gitea.io/gitea/models/db"
  10. "code.gitea.io/gitea/modules/timeutil"
  11. "xorm.io/builder"
  12. )
  13. var ErrPackageCleanupRuleNotExist = errors.New("Package blob does not exist")
  14. func init() {
  15. db.RegisterModel(new(PackageCleanupRule))
  16. }
  17. // PackageCleanupRule represents a rule which describes when to clean up package versions
  18. type PackageCleanupRule struct {
  19. ID int64 `xorm:"pk autoincr"`
  20. Enabled bool `xorm:"INDEX NOT NULL DEFAULT false"`
  21. OwnerID int64 `xorm:"UNIQUE(s) INDEX NOT NULL DEFAULT 0"`
  22. Type Type `xorm:"UNIQUE(s) INDEX NOT NULL"`
  23. KeepCount int `xorm:"NOT NULL DEFAULT 0"`
  24. KeepPattern string `xorm:"NOT NULL DEFAULT ''"`
  25. KeepPatternMatcher *regexp.Regexp `xorm:"-"`
  26. RemoveDays int `xorm:"NOT NULL DEFAULT 0"`
  27. RemovePattern string `xorm:"NOT NULL DEFAULT ''"`
  28. RemovePatternMatcher *regexp.Regexp `xorm:"-"`
  29. MatchFullName bool `xorm:"NOT NULL DEFAULT false"`
  30. CreatedUnix timeutil.TimeStamp `xorm:"created NOT NULL DEFAULT 0"`
  31. UpdatedUnix timeutil.TimeStamp `xorm:"updated NOT NULL DEFAULT 0"`
  32. }
  33. func (pcr *PackageCleanupRule) CompiledPattern() error {
  34. if pcr.KeepPatternMatcher != nil || pcr.RemovePatternMatcher != nil {
  35. return nil
  36. }
  37. if pcr.KeepPattern != "" {
  38. var err error
  39. pcr.KeepPatternMatcher, err = regexp.Compile(fmt.Sprintf(`(?i)\A%s\z`, pcr.KeepPattern))
  40. if err != nil {
  41. return err
  42. }
  43. }
  44. if pcr.RemovePattern != "" {
  45. var err error
  46. pcr.RemovePatternMatcher, err = regexp.Compile(fmt.Sprintf(`(?i)\A%s\z`, pcr.RemovePattern))
  47. if err != nil {
  48. return err
  49. }
  50. }
  51. return nil
  52. }
  53. func InsertCleanupRule(ctx context.Context, pcr *PackageCleanupRule) (*PackageCleanupRule, error) {
  54. return pcr, db.Insert(ctx, pcr)
  55. }
  56. func GetCleanupRuleByID(ctx context.Context, id int64) (*PackageCleanupRule, error) {
  57. pcr := &PackageCleanupRule{}
  58. has, err := db.GetEngine(ctx).ID(id).Get(pcr)
  59. if err != nil {
  60. return nil, err
  61. }
  62. if !has {
  63. return nil, ErrPackageCleanupRuleNotExist
  64. }
  65. return pcr, nil
  66. }
  67. func UpdateCleanupRule(ctx context.Context, pcr *PackageCleanupRule) error {
  68. _, err := db.GetEngine(ctx).ID(pcr.ID).AllCols().Update(pcr)
  69. return err
  70. }
  71. func GetCleanupRulesByOwner(ctx context.Context, ownerID int64) ([]*PackageCleanupRule, error) {
  72. pcrs := make([]*PackageCleanupRule, 0, 10)
  73. return pcrs, db.GetEngine(ctx).Where("owner_id = ?", ownerID).Find(&pcrs)
  74. }
  75. func DeleteCleanupRuleByID(ctx context.Context, ruleID int64) error {
  76. _, err := db.GetEngine(ctx).ID(ruleID).Delete(&PackageCleanupRule{})
  77. return err
  78. }
  79. func HasOwnerCleanupRuleForPackageType(ctx context.Context, ownerID int64, packageType Type) (bool, error) {
  80. return db.GetEngine(ctx).
  81. Where("owner_id = ? AND type = ?", ownerID, packageType).
  82. Exist(&PackageCleanupRule{})
  83. }
  84. func IterateEnabledCleanupRules(ctx context.Context, callback func(context.Context, *PackageCleanupRule) error) error {
  85. return db.Iterate(
  86. ctx,
  87. builder.Eq{"enabled": true},
  88. callback,
  89. )
  90. }