]> source.dussan.org Git - gitea.git/commitdiff
Add `DEFAULT_MIRROR_REPO_UNITS` and `DEFAULT_TEMPLATE_REPO_UNITS` options (#32416)
authorZettat123 <zettat123@gmail.com>
Mon, 11 Nov 2024 00:11:00 +0000 (08:11 +0800)
committerGitHub <noreply@github.com>
Mon, 11 Nov 2024 00:11:00 +0000 (00:11 +0000)
Resolve #30350

The action unit of mirrors and templates should be disabled by default.
This PR adds `DEFAULT_MIRROR_REPO_UNITS` and
`DEFAULT_TEMPLATE_REPO_UNITS` options to allow users to specify default
units for mirrors and templates.

Thanks to @lng2020 for the
[idea](https://github.com/go-gitea/gitea/issues/30350#issuecomment-2053942243)

custom/conf/app.example.ini
models/unit/unit.go
modules/setting/repository.go
services/repository/create.go

index f201ff1d1998b7f9ec92bd86d977adcdce42f8ea..7d5b3961bc8b5390d298e479f1cfc64e4c89feb7 100644 (file)
@@ -1007,6 +1007,14 @@ LEVEL = Info
 ;; The set of allowed values and rules are the same as DEFAULT_REPO_UNITS.
 ;DEFAULT_FORK_REPO_UNITS = repo.code,repo.pulls
 ;;
+;; Comma separated list of default mirror repo units.
+;; The set of allowed values and rules are the same as DEFAULT_REPO_UNITS.
+;DEFAULT_MIRROR_REPO_UNITS = repo.code,repo.releases,repo.issues,repo.wiki,repo.projects,repo.packages
+;;
+;; Comma separated list of default template repo units.
+;; The set of allowed values and rules are the same as DEFAULT_REPO_UNITS.
+;DEFAULT_TEMPLATE_REPO_UNITS = repo.code,repo.releases,repo.issues,repo.pulls,repo.wiki,repo.projects,repo.packages
+;;
 ;; Prefix archive files by placing them in a directory named after the repository
 ;PREFIX_ARCHIVE_FILES = true
 ;;
index 3b62e5f9822672c80ab6c9b25dc63f52105b7d90..c816fc6c68861aa5e1961dc9b25d25437da9eeeb 100644 (file)
@@ -80,6 +80,27 @@ var (
                TypePullRequests,
        }
 
+       // DefaultMirrorRepoUnits contains the default unit types for mirrors
+       DefaultMirrorRepoUnits = []Type{
+               TypeCode,
+               TypeIssues,
+               TypeReleases,
+               TypeWiki,
+               TypeProjects,
+               TypePackages,
+       }
+
+       // DefaultTemplateRepoUnits contains the default unit types for templates
+       DefaultTemplateRepoUnits = []Type{
+               TypeCode,
+               TypeIssues,
+               TypePullRequests,
+               TypeReleases,
+               TypeWiki,
+               TypeProjects,
+               TypePackages,
+       }
+
        // NotAllowedDefaultRepoUnits contains units that can't be default
        NotAllowedDefaultRepoUnits = []Type{
                TypeExternalWiki,
@@ -147,6 +168,7 @@ func LoadUnitConfig() error {
        if len(DefaultRepoUnits) == 0 {
                return errors.New("no default repository units found")
        }
+       // default fork repo units
        setDefaultForkRepoUnits, invalidKeys := FindUnitTypes(setting.Repository.DefaultForkRepoUnits...)
        if len(invalidKeys) > 0 {
                log.Warn("Invalid keys in default fork repo units: %s", strings.Join(invalidKeys, ", "))
@@ -155,6 +177,24 @@ func LoadUnitConfig() error {
        if len(DefaultForkRepoUnits) == 0 {
                return errors.New("no default fork repository units found")
        }
+       // default mirror repo units
+       setDefaultMirrorRepoUnits, invalidKeys := FindUnitTypes(setting.Repository.DefaultMirrorRepoUnits...)
+       if len(invalidKeys) > 0 {
+               log.Warn("Invalid keys in default mirror repo units: %s", strings.Join(invalidKeys, ", "))
+       }
+       DefaultMirrorRepoUnits = validateDefaultRepoUnits(DefaultMirrorRepoUnits, setDefaultMirrorRepoUnits)
+       if len(DefaultMirrorRepoUnits) == 0 {
+               return errors.New("no default mirror repository units found")
+       }
+       // default template repo units
+       setDefaultTemplateRepoUnits, invalidKeys := FindUnitTypes(setting.Repository.DefaultTemplateRepoUnits...)
+       if len(invalidKeys) > 0 {
+               log.Warn("Invalid keys in default template repo units: %s", strings.Join(invalidKeys, ", "))
+       }
+       DefaultTemplateRepoUnits = validateDefaultRepoUnits(DefaultTemplateRepoUnits, setDefaultTemplateRepoUnits)
+       if len(DefaultTemplateRepoUnits) == 0 {
+               return errors.New("no default template repository units found")
+       }
        return nil
 }
 
index 8656ebc7ecfd0bc0d0a132b3cae7b3d7253cc521..14cf5805c02b51162f9854b8f705cef58bccda20 100644 (file)
@@ -43,6 +43,8 @@ var (
                DisabledRepoUnits                       []string
                DefaultRepoUnits                        []string
                DefaultForkRepoUnits                    []string
+               DefaultMirrorRepoUnits                  []string
+               DefaultTemplateRepoUnits                []string
                PrefixArchiveFiles                      bool
                DisableMigrations                       bool
                DisableStars                            bool `ini:"DISABLE_STARS"`
@@ -161,6 +163,8 @@ var (
                DisabledRepoUnits:                       []string{},
                DefaultRepoUnits:                        []string{},
                DefaultForkRepoUnits:                    []string{},
+               DefaultMirrorRepoUnits:                  []string{},
+               DefaultTemplateRepoUnits:                []string{},
                PrefixArchiveFiles:                      true,
                DisableMigrations:                       false,
                DisableStars:                            false,
index 261ac7fcccae01e167f902ad4227eb504461c6d7..0207f12a33f9d8eb3e22dc52431b5cf9833eb7b1 100644 (file)
@@ -381,8 +381,13 @@ func CreateRepositoryByExample(ctx context.Context, doer, u *user_model.User, re
 
        // insert units for repo
        defaultUnits := unit.DefaultRepoUnits
-       if isFork {
+       switch {
+       case isFork:
                defaultUnits = unit.DefaultForkRepoUnits
+       case repo.IsMirror:
+               defaultUnits = unit.DefaultMirrorRepoUnits
+       case repo.IsTemplate:
+               defaultUnits = unit.DefaultTemplateRepoUnits
        }
        units := make([]repo_model.RepoUnit, 0, len(defaultUnits))
        for _, tp := range defaultUnits {