From afd97dde3a69c38058f4eec200e44bb713d346a5 Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Sat, 4 Sep 2021 19:35:11 +0200 Subject: [PATCH 01/10] move disable_mirror from repo to mirror section --- custom/conf/app.example.ini | 6 +++--- docs/content/doc/advanced/config-cheat-sheet.en-us.md | 2 +- integrations/api_settings_test.go | 2 +- modules/setting/repository.go | 2 -- modules/setting/setting.go | 6 ++++++ routers/api/v1/repo/migrate.go | 2 +- routers/api/v1/settings/settings.go | 2 +- routers/web/org/home.go | 2 +- routers/web/repo/migrate.go | 4 ++-- routers/web/repo/setting.go | 2 +- 10 files changed, 17 insertions(+), 13 deletions(-) diff --git a/custom/conf/app.example.ini b/custom/conf/app.example.ini index 40d5742effb02..bbd8ee26efda7 100644 --- a/custom/conf/app.example.ini +++ b/custom/conf/app.example.ini @@ -800,9 +800,6 @@ PATH = ;; Prefix archive files by placing them in a directory named after the repository ;PREFIX_ARCHIVE_FILES = true ;; -;; Disable the creation of new mirrors. Pre-existing mirrors remain valid. -;DISABLE_MIRRORS = false -;; ;; Disable migrating feature. ;DISABLE_MIGRATIONS = false ;; @@ -1945,6 +1942,9 @@ PATH = ;[mirror] ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Disable the creation of new mirrors. Pre-existing mirrors remain valid. +;ENABLED = true // TODO: CREATE_PULL: true; CREATE_PULL: true +;; ;; Default interval as a duration between each check ;DEFAULT_INTERVAL = 8h ;; Min interval as a duration must be > 1m diff --git a/docs/content/doc/advanced/config-cheat-sheet.en-us.md b/docs/content/doc/advanced/config-cheat-sheet.en-us.md index 242189f5b0f54..ff2860c65923d 100644 --- a/docs/content/doc/advanced/config-cheat-sheet.en-us.md +++ b/docs/content/doc/advanced/config-cheat-sheet.en-us.md @@ -73,7 +73,6 @@ Values containing `#` or `;` must be quoted using `` ` `` or `"""`. - `DISABLED_REPO_UNITS`: **_empty_**: Comma separated list of globally disabled repo units. Allowed values: \[repo.issues, repo.ext_issues, repo.pulls, repo.wiki, repo.ext_wiki, repo.projects\] - `DEFAULT_REPO_UNITS`: **repo.code,repo.releases,repo.issues,repo.pulls,repo.wiki,repo.projects**: Comma separated list of default repo units. Allowed values: \[repo.code, repo.releases, repo.issues, repo.pulls, repo.wiki, repo.projects\]. Note: Code and Releases can currently not be deactivated. If you specify default repo units you should still list them for future compatibility. External wiki and issue tracker can't be enabled by default as it requires additional settings. Disabled repo units will not be added to new repositories regardless if it is in the default list. - `PREFIX_ARCHIVE_FILES`: **true**: Prefix archive files by placing them in a directory named after the repository. -- `DISABLE_MIRRORS`: **false**: Disable the creation of **new** mirrors. Pre-existing mirrors remain valid. - `DISABLE_MIGRATIONS`: **false**: Disable migrating feature. - `DISABLE_STARS`: **false**: Disable stars feature. - `DEFAULT_BRANCH`: **master**: Default branch name of all repositories. @@ -955,6 +954,7 @@ Task queue configuration has been moved to `queue.task`. However, the below conf ## Mirror (`mirror`) +- `ENABLED`: **true**: Allow the creation of **new** mirrors. Pre-existing mirrors remain valid. - `DEFAULT_INTERVAL`: **8h**: Default interval between each check - `MIN_INTERVAL`: **10m**: Minimum interval for checking. (Must be >1m). diff --git a/integrations/api_settings_test.go b/integrations/api_settings_test.go index fdd8b02d625d1..10318cec7ff9a 100644 --- a/integrations/api_settings_test.go +++ b/integrations/api_settings_test.go @@ -43,7 +43,7 @@ func TestAPIExposedSettings(t *testing.T) { DecodeJSON(t, resp, &repo) assert.EqualValues(t, &api.GeneralRepoSettings{ - MirrorsDisabled: setting.Repository.DisableMirrors, + MirrorsDisabled: !setting.Mirror.Enabled, HTTPGitDisabled: setting.Repository.DisableHTTPGit, MigrationsDisabled: setting.Repository.DisableMigrations, TimeTrackingDisabled: false, diff --git a/modules/setting/repository.go b/modules/setting/repository.go index f981809427b88..de57eb91401a6 100644 --- a/modules/setting/repository.go +++ b/modules/setting/repository.go @@ -41,7 +41,6 @@ var ( DisabledRepoUnits []string DefaultRepoUnits []string PrefixArchiveFiles bool - DisableMirrors bool DisableMigrations bool DisableStars bool `ini:"DISABLE_STARS"` DefaultBranch string @@ -155,7 +154,6 @@ var ( DisabledRepoUnits: []string{}, DefaultRepoUnits: []string{}, PrefixArchiveFiles: true, - DisableMirrors: false, DisableMigrations: false, DisableStars: false, DefaultBranch: "master", diff --git a/modules/setting/setting.go b/modules/setting/setting.go index 441bceda20e10..d046d75514616 100644 --- a/modules/setting/setting.go +++ b/modules/setting/setting.go @@ -350,6 +350,8 @@ var ( // Mirror settings Mirror struct { + Enabled bool + AllowedModes string DefaultInterval time.Duration MinInterval time.Duration } @@ -939,6 +941,10 @@ func NewContext() { newGit() sec = Cfg.Section("mirror") + Mirror.Enabled = sec.Key("ENABLED").MustBool( + // fallback to old config repository.DISABLE_MIRRORS + !Cfg.Section("repository").Key("DISABLE_MIRRORS").MustBool(false), + ) Mirror.MinInterval = sec.Key("MIN_INTERVAL").MustDuration(10 * time.Minute) Mirror.DefaultInterval = sec.Key("DEFAULT_INTERVAL").MustDuration(8 * time.Hour) if Mirror.MinInterval.Minutes() < 1 { diff --git a/routers/api/v1/repo/migrate.go b/routers/api/v1/repo/migrate.go index de33a3645b75f..9e75eba3128a4 100644 --- a/routers/api/v1/repo/migrate.go +++ b/routers/api/v1/repo/migrate.go @@ -108,7 +108,7 @@ func Migrate(ctx *context.APIContext) { gitServiceType := convert.ToGitServiceType(form.Service) - if form.Mirror && setting.Repository.DisableMirrors { + if form.Mirror && !setting.Mirror.Enabled { ctx.Error(http.StatusForbidden, "MirrorsGlobalDisabled", fmt.Errorf("the site administrator has disabled mirrors")) return } diff --git a/routers/api/v1/settings/settings.go b/routers/api/v1/settings/settings.go index ca2d28fb8bf25..36f93893a8800 100644 --- a/routers/api/v1/settings/settings.go +++ b/routers/api/v1/settings/settings.go @@ -58,7 +58,7 @@ func GetGeneralRepoSettings(ctx *context.APIContext) { // "200": // "$ref": "#/responses/GeneralRepoSettings" ctx.JSON(http.StatusOK, api.GeneralRepoSettings{ - MirrorsDisabled: setting.Repository.DisableMirrors, + MirrorsDisabled: !setting.Mirror.Enabled, HTTPGitDisabled: setting.Repository.DisableHTTPGit, MigrationsDisabled: setting.Repository.DisableMigrations, StarsDisabled: setting.Repository.DisableStars, diff --git a/routers/web/org/home.go b/routers/web/org/home.go index 0c1f381d30072..6874b0118437d 100644 --- a/routers/web/org/home.go +++ b/routers/web/org/home.go @@ -141,7 +141,7 @@ func Home(ctx *context.Context) { ctx.Data["Members"] = members ctx.Data["Teams"] = org.Teams - ctx.Data["DisabledMirrors"] = setting.Repository.DisableMirrors + ctx.Data["DisabledMirrors"] = !setting.Mirror.Enabled pager := context.NewPagination(int(count), setting.UI.User.RepoPagingNum, page, 5) pager.SetDefaultParams(ctx) diff --git a/routers/web/repo/migrate.go b/routers/web/repo/migrate.go index 3d710d0448948..b6f1f92a1d15a 100644 --- a/routers/web/repo/migrate.go +++ b/routers/web/repo/migrate.go @@ -203,7 +203,7 @@ func MigratePost(ctx *context.Context) { RepoName: form.RepoName, Description: form.Description, Private: form.Private || setting.Repository.ForcePrivate, - Mirror: form.Mirror && !setting.Repository.DisableMirrors, + Mirror: form.Mirror && setting.Mirror.Enabled, LFS: form.LFS, LFSEndpoint: form.LFSEndpoint, AuthUsername: form.AuthUsername, @@ -246,7 +246,7 @@ func setMigrationContextData(ctx *context.Context, serviceType structs.GitServic ctx.Data["LFSActive"] = setting.LFS.StartServer ctx.Data["IsForcedPrivate"] = setting.Repository.ForcePrivate - ctx.Data["DisableMirrors"] = setting.Repository.DisableMirrors + ctx.Data["DisableMirrors"] = !setting.Mirror.Enabled // Plain git should be first ctx.Data["Services"] = append([]structs.GitServiceType{structs.PlainGitService}, structs.SupportedFullGitService...) diff --git a/routers/web/repo/setting.go b/routers/web/repo/setting.go index 136e08cb4702e..837c31de8cf38 100644 --- a/routers/web/repo/setting.go +++ b/routers/web/repo/setting.go @@ -52,7 +52,7 @@ func Settings(ctx *context.Context) { ctx.Data["Title"] = ctx.Tr("repo.settings") ctx.Data["PageIsSettingsOptions"] = true ctx.Data["ForcePrivate"] = setting.Repository.ForcePrivate - ctx.Data["DisabledMirrors"] = setting.Repository.DisableMirrors + ctx.Data["DisabledMirrors"] = !setting.Mirror.Enabled ctx.Data["DefaultMirrorInterval"] = setting.Mirror.DefaultInterval signing, _ := models.SigningKey(ctx.Repo.Repository.RepoPath()) From bbe0302079d2f6c2455125e25a28b8a6e16a8b6c Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Sat, 4 Sep 2021 19:43:37 +0200 Subject: [PATCH 02/10] move mirror disable setting into mirror section and make it more fine granular --- models/repo_pushmirror.go | 5 +++ modules/setting/mirror.go | 53 ++++++++++++++++++++++++++++ modules/setting/setting.go | 24 +------------ routers/api/v1/repo/migrate.go | 4 +-- routers/api/v1/repo/mirror.go | 6 ++++ routers/web/org/home.go | 2 +- routers/web/repo/migrate.go | 15 ++++---- routers/web/repo/setting.go | 23 ++++++++++-- services/mirror/mirror.go | 13 +++++++ templates/org/home.tmpl | 2 +- templates/repo/migrate/options.tmpl | 2 +- templates/repo/settings/options.tmpl | 4 ++- 12 files changed, 115 insertions(+), 38 deletions(-) create mode 100644 modules/setting/mirror.go diff --git a/models/repo_pushmirror.go b/models/repo_pushmirror.go index 439972ffa6cc5..60e116e93b4bf 100644 --- a/models/repo_pushmirror.go +++ b/models/repo_pushmirror.go @@ -6,9 +6,11 @@ package models import ( "errors" + "fmt" "time" "code.gitea.io/gitea/modules/log" + "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/timeutil" "xorm.io/xorm" @@ -57,6 +59,9 @@ func (m *PushMirror) GetRemoteName() string { // InsertPushMirror inserts a push-mirror to database func InsertPushMirror(m *PushMirror) error { + if setting.Mirror.DisableNewPush { + return fmt.Errorf("creation of new push mirror's are disabled") + } _, err := x.Insert(m) return err } diff --git a/modules/setting/mirror.go b/modules/setting/mirror.go new file mode 100644 index 0000000000000..5c292549df503 --- /dev/null +++ b/modules/setting/mirror.go @@ -0,0 +1,53 @@ +// Copyright 2021 The Gitea Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package setting + +import ( + "time" + + "code.gitea.io/gitea/modules/log" +) + +var ( + // Mirror settings + Mirror = struct { + Enabled bool + DisableNewPull bool + DisableNewPush bool + DefaultInterval time.Duration + MinInterval time.Duration + }{ + Enabled: true, + DisableNewPull: false, + DisableNewPush: false, + MinInterval: 10 * time.Minute, + DefaultInterval: 8 * time.Hour, + } +) + +func newMirror() { + if err := Cfg.Section("mirror").MapTo(&Mirror); err != nil { + log.Fatal("Failed to map Mirror settings: %v", err) + } + + // fallback to old config repository.DISABLE_MIRRORS + if Cfg.Section("repository").Key("DISABLE_MIRRORS").MustBool(false) { + Mirror.DisableNewPull = true + } + + if !Mirror.Enabled { + Mirror.DisableNewPull = true + Mirror.DisableNewPush = true + } + + if Mirror.MinInterval.Minutes() < 1 { + log.Warn("Mirror.MinInterval is too low, set to 1 minute") + Mirror.MinInterval = 1 * time.Minute + } + if Mirror.DefaultInterval < Mirror.MinInterval { + log.Warn("Mirror.DefaultInterval is less than Mirror.MinInterval, set to 8 hours") + Mirror.DefaultInterval = time.Hour * 8 + } +} diff --git a/modules/setting/setting.go b/modules/setting/setting.go index d046d75514616..ee8934a24c533 100644 --- a/modules/setting/setting.go +++ b/modules/setting/setting.go @@ -348,14 +348,6 @@ var ( ManifestData string - // Mirror settings - Mirror struct { - Enabled bool - AllowedModes string - DefaultInterval time.Duration - MinInterval time.Duration - } - // API settings API = struct { EnableSwagger bool @@ -940,21 +932,7 @@ func NewContext() { newGit() - sec = Cfg.Section("mirror") - Mirror.Enabled = sec.Key("ENABLED").MustBool( - // fallback to old config repository.DISABLE_MIRRORS - !Cfg.Section("repository").Key("DISABLE_MIRRORS").MustBool(false), - ) - Mirror.MinInterval = sec.Key("MIN_INTERVAL").MustDuration(10 * time.Minute) - Mirror.DefaultInterval = sec.Key("DEFAULT_INTERVAL").MustDuration(8 * time.Hour) - if Mirror.MinInterval.Minutes() < 1 { - log.Warn("Mirror.MinInterval is too low") - Mirror.MinInterval = 1 * time.Minute - } - if Mirror.DefaultInterval < Mirror.MinInterval { - log.Warn("Mirror.DefaultInterval is less than Mirror.MinInterval") - Mirror.DefaultInterval = time.Hour * 8 - } + newMirror() Langs = Cfg.Section("i18n").Key("LANGS").Strings(",") if len(Langs) == 0 { diff --git a/routers/api/v1/repo/migrate.go b/routers/api/v1/repo/migrate.go index 9e75eba3128a4..9350ae520554d 100644 --- a/routers/api/v1/repo/migrate.go +++ b/routers/api/v1/repo/migrate.go @@ -108,8 +108,8 @@ func Migrate(ctx *context.APIContext) { gitServiceType := convert.ToGitServiceType(form.Service) - if form.Mirror && !setting.Mirror.Enabled { - ctx.Error(http.StatusForbidden, "MirrorsGlobalDisabled", fmt.Errorf("the site administrator has disabled mirrors")) + if form.Mirror && setting.Mirror.DisableNewPull { + ctx.Error(http.StatusForbidden, "MirrorsGlobalDisabled", fmt.Errorf("the site administrator has disabled new mirror creations")) return } diff --git a/routers/api/v1/repo/mirror.go b/routers/api/v1/repo/mirror.go index 82da680e55c26..c5a4b284c0ee1 100644 --- a/routers/api/v1/repo/mirror.go +++ b/routers/api/v1/repo/mirror.go @@ -9,6 +9,7 @@ import ( "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/context" + "code.gitea.io/gitea/modules/setting" mirror_service "code.gitea.io/gitea/services/mirror" ) @@ -42,6 +43,11 @@ func MirrorSync(ctx *context.APIContext) { ctx.Error(http.StatusForbidden, "MirrorSync", "Must have write access") } + if !setting.Mirror.Enabled { + ctx.Status(http.StatusBadRequest) + return + } + mirror_service.StartToMirror(repo.ID) ctx.Status(http.StatusOK) diff --git a/routers/web/org/home.go b/routers/web/org/home.go index 6874b0118437d..f682dc5cb697f 100644 --- a/routers/web/org/home.go +++ b/routers/web/org/home.go @@ -141,7 +141,7 @@ func Home(ctx *context.Context) { ctx.Data["Members"] = members ctx.Data["Teams"] = org.Teams - ctx.Data["DisabledMirrors"] = !setting.Mirror.Enabled + ctx.Data["DisableNewPullMirrors"] = setting.Mirror.DisableNewPull pager := context.NewPagination(int(count), setting.UI.User.RepoPagingNum, page, 5) pager.SetDefaultParams(ctx) diff --git a/routers/web/repo/migrate.go b/routers/web/repo/migrate.go index b6f1f92a1d15a..b2e6fa890be06 100644 --- a/routers/web/repo/migrate.go +++ b/routers/web/repo/migrate.go @@ -152,9 +152,12 @@ func MigratePost(ctx *context.Context) { return } - serviceType := structs.GitServiceType(form.Service) + if form.Mirror && setting.Mirror.DisableNewPull { + ctx.Error(http.StatusBadRequest, "MigratePost: the site administrator has disabled creation of new mirrors") + return + } - setMigrationContextData(ctx, serviceType) + setMigrationContextData(ctx, form.Service) ctxUser := checkContextUser(ctx, form.UID) if ctx.Written() { @@ -162,7 +165,7 @@ func MigratePost(ctx *context.Context) { } ctx.Data["ContextUser"] = ctxUser - tpl := base.TplName("repo/migrate/" + serviceType.Name()) + tpl := base.TplName("repo/migrate/" + form.Service.Name()) if ctx.HasError() { ctx.HTML(http.StatusOK, tpl) @@ -198,12 +201,12 @@ func MigratePost(ctx *context.Context) { var opts = migrations.MigrateOptions{ OriginalURL: form.CloneAddr, - GitServiceType: serviceType, + GitServiceType: form.Service, CloneAddr: remoteAddr, RepoName: form.RepoName, Description: form.Description, Private: form.Private || setting.Repository.ForcePrivate, - Mirror: form.Mirror && setting.Mirror.Enabled, + Mirror: form.Mirror, LFS: form.LFS, LFSEndpoint: form.LFSEndpoint, AuthUsername: form.AuthUsername, @@ -246,7 +249,7 @@ func setMigrationContextData(ctx *context.Context, serviceType structs.GitServic ctx.Data["LFSActive"] = setting.LFS.StartServer ctx.Data["IsForcedPrivate"] = setting.Repository.ForcePrivate - ctx.Data["DisableMirrors"] = !setting.Mirror.Enabled + ctx.Data["DisableNewPullMirrors"] = setting.Mirror.DisableNewPull // Plain git should be first ctx.Data["Services"] = append([]structs.GitServiceType{structs.PlainGitService}, structs.SupportedFullGitService...) diff --git a/routers/web/repo/setting.go b/routers/web/repo/setting.go index 837c31de8cf38..624c01814e28e 100644 --- a/routers/web/repo/setting.go +++ b/routers/web/repo/setting.go @@ -52,7 +52,8 @@ func Settings(ctx *context.Context) { ctx.Data["Title"] = ctx.Tr("repo.settings") ctx.Data["PageIsSettingsOptions"] = true ctx.Data["ForcePrivate"] = setting.Repository.ForcePrivate - ctx.Data["DisabledMirrors"] = !setting.Mirror.Enabled + ctx.Data["MirrorsEnabled"] = setting.Mirror.Enabled + ctx.Data["DisableNewPushMirrors"] = setting.Mirror.DisableNewPush ctx.Data["DefaultMirrorInterval"] = setting.Mirror.DefaultInterval signing, _ := models.SigningKey(ctx.Repo.Repository.RepoPath()) @@ -144,7 +145,7 @@ func SettingsPost(ctx *context.Context) { ctx.Redirect(repo.Link() + "/settings") case "mirror": - if !repo.IsMirror { + if !setting.Mirror.Enabled || !repo.IsMirror { ctx.NotFound("", nil) return } @@ -220,7 +221,7 @@ func SettingsPost(ctx *context.Context) { ctx.Redirect(repo.Link() + "/settings") case "mirror-sync": - if !repo.IsMirror { + if !setting.Mirror.Enabled || !repo.IsMirror { ctx.NotFound("", nil) return } @@ -231,6 +232,11 @@ func SettingsPost(ctx *context.Context) { ctx.Redirect(repo.Link() + "/settings") case "push-mirror-sync": + if !setting.Mirror.Enabled { + ctx.NotFound("", nil) + return + } + m, err := selectPushMirrorByForm(form, repo) if err != nil { ctx.NotFound("", nil) @@ -243,6 +249,11 @@ func SettingsPost(ctx *context.Context) { ctx.Redirect(repo.Link() + "/settings") case "push-mirror-remove": + if !setting.Mirror.Enabled { + ctx.NotFound("", nil) + return + } + // This section doesn't require repo_name/RepoName to be set in the form, don't show it // as an error on the UI for this action ctx.Data["Err_RepoName"] = nil @@ -267,6 +278,11 @@ func SettingsPost(ctx *context.Context) { ctx.Redirect(repo.Link() + "/settings") case "push-mirror-add": + if setting.Mirror.DisableNewPush { + ctx.NotFound("", nil) + return + } + // This section doesn't require repo_name/RepoName to be set in the form, don't show it // as an error on the UI for this action ctx.Data["Err_RepoName"] = nil @@ -698,6 +714,7 @@ func SettingsPost(ctx *context.Context) { log.Trace("Repository was archived: %s/%s", ctx.Repo.Owner.Name, repo.Name) ctx.Redirect(ctx.Repo.RepoLink + "/settings") + case "unarchive": if !ctx.Repo.IsOwner() { ctx.Error(http.StatusForbidden) diff --git a/services/mirror/mirror.go b/services/mirror/mirror.go index 1e30c919e6d4c..7a3e37d993597 100644 --- a/services/mirror/mirror.go +++ b/services/mirror/mirror.go @@ -22,6 +22,10 @@ var mirrorQueue = sync.NewUniqueQueue(setting.Repository.MirrorQueueLength) // Update checks and updates mirror repositories. func Update(ctx context.Context) error { + if !setting.Mirror.Enabled { + log.Warn("Mirror feature disabled, but cron job enabled: skip update") + return nil + } log.Trace("Doing: Update") handler := func(idx int, bean interface{}) error { @@ -89,15 +93,24 @@ func syncMirrors(ctx context.Context) { // InitSyncMirrors initializes a go routine to sync the mirrors func InitSyncMirrors() { + if !setting.Mirror.Enabled { + return + } go graceful.GetManager().RunWithShutdownContext(syncMirrors) } // StartToMirror adds repoID to mirror queue func StartToMirror(repoID int64) { + if !setting.Mirror.Enabled { + return + } go mirrorQueue.Add(fmt.Sprintf("pull %d", repoID)) } // AddPushMirrorToQueue adds the push mirror to the queue func AddPushMirrorToQueue(mirrorID int64) { + if !setting.Mirror.Enabled { + return + } go mirrorQueue.Add(fmt.Sprintf("push %d", mirrorID)) } diff --git a/templates/org/home.tmpl b/templates/org/home.tmpl index 5e0a53aa56843..153de30ca31d4 100644 --- a/templates/org/home.tmpl +++ b/templates/org/home.tmpl @@ -26,7 +26,7 @@
{{if .CanCreateOrgRepo}}
- {{if not .DisabledMirrors}} + {{if not .DisableNewPullMirrors}} {{.i18n.Tr "new_migrate"}} {{end}} {{.i18n.Tr "new_repo"}} diff --git a/templates/repo/migrate/options.tmpl b/templates/repo/migrate/options.tmpl index bca773a53f90e..8aefaf68f12b2 100644 --- a/templates/repo/migrate/options.tmpl +++ b/templates/repo/migrate/options.tmpl @@ -1,7 +1,7 @@
- {{if .DisableMirrors}} + {{if .DisableNewPullMirrors}} {{else}} diff --git a/templates/repo/settings/options.tmpl b/templates/repo/settings/options.tmpl index 4054158544f7b..881e12c87d6f5 100644 --- a/templates/repo/settings/options.tmpl +++ b/templates/repo/settings/options.tmpl @@ -70,7 +70,7 @@
- {{if or .Repository.IsMirror (not .DisabledMirrors)}} + {{if .MirrorsEnabled}}

{{.i18n.Tr "repo.settings.mirror_settings"}}

@@ -191,6 +191,7 @@ {{$.i18n.Tr "repo.settings.mirror_settings.push_mirror.none"}} {{end}} + {{if (not .DisableNewPushMirrors)}}
@@ -227,6 +228,7 @@
+ {{end}}
From 12713b421d07f7815b61884cf2a710e0132e33f1 Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Sun, 5 Sep 2021 04:23:20 +0200 Subject: [PATCH 03/10] documentation --- custom/conf/app.example.ini | 9 ++++++--- docs/content/doc/advanced/config-cheat-sheet.en-us.md | 4 +++- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/custom/conf/app.example.ini b/custom/conf/app.example.ini index bbd8ee26efda7..c55c092b3aeee 100644 --- a/custom/conf/app.example.ini +++ b/custom/conf/app.example.ini @@ -1942,9 +1942,12 @@ PATH = ;[mirror] ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Disable the creation of new mirrors. Pre-existing mirrors remain valid. -;ENABLED = true // TODO: CREATE_PULL: true; CREATE_PULL: true -;; +;; Whether gitea's mirror function can be used or not. +;ENABLED = true +;; Disable the creation of **new** mirrors. Pre-existing mirrors remain valid. +;DISABLE_NEW_PULL = false +;; Disable the creation of **new** push mirrors. Pre-existing mirrors remain valid. +;DISABLE_NEW_PUSH = false ;; Default interval as a duration between each check ;DEFAULT_INTERVAL = 8h ;; Min interval as a duration must be > 1m diff --git a/docs/content/doc/advanced/config-cheat-sheet.en-us.md b/docs/content/doc/advanced/config-cheat-sheet.en-us.md index ff2860c65923d..57a90a4f03047 100644 --- a/docs/content/doc/advanced/config-cheat-sheet.en-us.md +++ b/docs/content/doc/advanced/config-cheat-sheet.en-us.md @@ -954,7 +954,9 @@ Task queue configuration has been moved to `queue.task`. However, the below conf ## Mirror (`mirror`) -- `ENABLED`: **true**: Allow the creation of **new** mirrors. Pre-existing mirrors remain valid. +- `ENABLED`: **true**: Whether gitea's mirror function can be used or not. +- `DISABLE_NEW_PULL`: **false**: Disable the creation of **new** mirrors. Pre-existing mirrors remain valid. +- `DISABLE_NEW_PUSH`: **false**: Disable the creation of **new** push mirrors. Pre-existing mirrors remain valid. - `DEFAULT_INTERVAL`: **8h**: Default interval between each check - `MIN_INTERVAL`: **10m**: Minimum interval for checking. (Must be >1m). From 38802092f8543ed020a04fd246188c27afdb7a57 Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Sun, 5 Sep 2021 11:38:27 +0200 Subject: [PATCH 04/10] indenting --- templates/repo/settings/options.tmpl | 68 ++++++++++++++-------------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/templates/repo/settings/options.tmpl b/templates/repo/settings/options.tmpl index 881e12c87d6f5..688966d5232ce 100644 --- a/templates/repo/settings/options.tmpl +++ b/templates/repo/settings/options.tmpl @@ -192,42 +192,42 @@ {{end}} {{if (not .DisableNewPushMirrors)}} - - -
- {{.CsrfTokenHtml}} - -
- - -

{{.i18n.Tr "repo.mirror_address_desc"}}

-
-
- - {{.i18n.Tr "repo.need_auth"}} - -
-
- - -
- -
- - + + + + {{.CsrfTokenHtml}} + +
+ + +

{{.i18n.Tr "repo.mirror_address_desc"}}

+
+
+ + {{.i18n.Tr "repo.need_auth"}} + +
+
+ + +
+ +
+ + +
+
+
+ +
-
-
- - -
-
- -
-
- - +
+ +
+ + + {{end}} From 82d2925c3e4d90efc9af643ee244d3ed14ce3e20 Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Sun, 5 Sep 2021 11:41:42 +0200 Subject: [PATCH 05/10] deprecated msg on fallback usage --- modules/setting/mirror.go | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/setting/mirror.go b/modules/setting/mirror.go index 5c292549df503..67de6e22464c1 100644 --- a/modules/setting/mirror.go +++ b/modules/setting/mirror.go @@ -34,6 +34,7 @@ func newMirror() { // fallback to old config repository.DISABLE_MIRRORS if Cfg.Section("repository").Key("DISABLE_MIRRORS").MustBool(false) { + log.Warn("Deprecated DISABLE_MIRRORS config is used, please change your config and use the optins within [mirror] section") Mirror.DisableNewPull = true } From 00db6ff41ce41c50575f6a0bcc79f64247e5ad0d Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Sun, 5 Sep 2021 11:43:04 +0200 Subject: [PATCH 06/10] update docs --- custom/conf/app.example.ini | 2 +- docs/content/doc/advanced/config-cheat-sheet.en-us.md | 2 +- modules/setting/mirror.go | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/custom/conf/app.example.ini b/custom/conf/app.example.ini index c55c092b3aeee..578bb26c70195 100644 --- a/custom/conf/app.example.ini +++ b/custom/conf/app.example.ini @@ -1942,7 +1942,7 @@ PATH = ;[mirror] ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Whether gitea's mirror function can be used or not. +;; Enables the mirror functionality. Set to **false** to disable all mirrors. ;ENABLED = true ;; Disable the creation of **new** mirrors. Pre-existing mirrors remain valid. ;DISABLE_NEW_PULL = false diff --git a/docs/content/doc/advanced/config-cheat-sheet.en-us.md b/docs/content/doc/advanced/config-cheat-sheet.en-us.md index 57a90a4f03047..8d48c2ac790d3 100644 --- a/docs/content/doc/advanced/config-cheat-sheet.en-us.md +++ b/docs/content/doc/advanced/config-cheat-sheet.en-us.md @@ -954,7 +954,7 @@ Task queue configuration has been moved to `queue.task`. However, the below conf ## Mirror (`mirror`) -- `ENABLED`: **true**: Whether gitea's mirror function can be used or not. +- `ENABLED`: **true**: Enables the mirror functionality. Set to **false** to disable all mirrors. - `DISABLE_NEW_PULL`: **false**: Disable the creation of **new** mirrors. Pre-existing mirrors remain valid. - `DISABLE_NEW_PUSH`: **false**: Disable the creation of **new** push mirrors. Pre-existing mirrors remain valid. - `DEFAULT_INTERVAL`: **8h**: Default interval between each check diff --git a/modules/setting/mirror.go b/modules/setting/mirror.go index 67de6e22464c1..78ed02d7b3fb8 100644 --- a/modules/setting/mirror.go +++ b/modules/setting/mirror.go @@ -35,6 +35,7 @@ func newMirror() { // fallback to old config repository.DISABLE_MIRRORS if Cfg.Section("repository").Key("DISABLE_MIRRORS").MustBool(false) { log.Warn("Deprecated DISABLE_MIRRORS config is used, please change your config and use the optins within [mirror] section") + // TODO: enable on v1.17.0: log.Error("Deprecated fallback used, will be removed in v1.18.0") Mirror.DisableNewPull = true } From 4f55d71187cac3215458c3fea4bf12a6f5c83566 Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Mon, 6 Sep 2021 13:37:36 +0200 Subject: [PATCH 07/10] as per @lunny --- models/repo_pushmirror.go | 5 ----- 1 file changed, 5 deletions(-) diff --git a/models/repo_pushmirror.go b/models/repo_pushmirror.go index 60e116e93b4bf..439972ffa6cc5 100644 --- a/models/repo_pushmirror.go +++ b/models/repo_pushmirror.go @@ -6,11 +6,9 @@ package models import ( "errors" - "fmt" "time" "code.gitea.io/gitea/modules/log" - "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/timeutil" "xorm.io/xorm" @@ -59,9 +57,6 @@ func (m *PushMirror) GetRemoteName() string { // InsertPushMirror inserts a push-mirror to database func InsertPushMirror(m *PushMirror) error { - if setting.Mirror.DisableNewPush { - return fmt.Errorf("creation of new push mirror's are disabled") - } _, err := x.Insert(m) return err } From 2106a451f68d787ae2d02baa6f8cd6a678e903d6 Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Mon, 6 Sep 2021 19:36:21 +0200 Subject: [PATCH 08/10] Apply suggestions from code review Co-authored-by: zeripath --- modules/setting/mirror.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/modules/setting/mirror.go b/modules/setting/mirror.go index 78ed02d7b3fb8..2698b5bf5dbdb 100644 --- a/modules/setting/mirror.go +++ b/modules/setting/mirror.go @@ -28,16 +28,16 @@ var ( ) func newMirror() { - if err := Cfg.Section("mirror").MapTo(&Mirror); err != nil { - log.Fatal("Failed to map Mirror settings: %v", err) - } - - // fallback to old config repository.DISABLE_MIRRORS + // Handle old configuration through `[repository]` `DISABLE_MIRRORS` + // - please note this was badly named and only disabled the creation of new pull mirrors if Cfg.Section("repository").Key("DISABLE_MIRRORS").MustBool(false) { - log.Warn("Deprecated DISABLE_MIRRORS config is used, please change your config and use the optins within [mirror] section") + log.Warn("Deprecated DISABLE_MIRRORS config is used, please change your config and use the options within the [mirror] section") // TODO: enable on v1.17.0: log.Error("Deprecated fallback used, will be removed in v1.18.0") Mirror.DisableNewPull = true } + if err := Cfg.Section("mirror").MapTo(&Mirror); err != nil { + log.Fatal("Failed to map Mirror settings: %v", err) + } if !Mirror.Enabled { Mirror.DisableNewPull = true From b3fb7fe37e76a3e448b8683e36cf40820e7d4425 Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Mon, 6 Sep 2021 23:46:32 +0200 Subject: [PATCH 09/10] Apply suggestions from code review Co-authored-by: delvh --- custom/conf/app.example.ini | 4 ++-- docs/content/doc/advanced/config-cheat-sheet.en-us.md | 4 ++-- routers/api/v1/repo/migrate.go | 2 +- routers/api/v1/repo/mirror.go | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/custom/conf/app.example.ini b/custom/conf/app.example.ini index 578bb26c70195..2637e0ec7a281 100644 --- a/custom/conf/app.example.ini +++ b/custom/conf/app.example.ini @@ -1944,9 +1944,9 @@ PATH = ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Enables the mirror functionality. Set to **false** to disable all mirrors. ;ENABLED = true -;; Disable the creation of **new** mirrors. Pre-existing mirrors remain valid. +;; Disable the creation of **new** pull mirrors. Pre-existing mirrors remain valid. Will be ignored if `mirror.ENABLED` is `false`. ;DISABLE_NEW_PULL = false -;; Disable the creation of **new** push mirrors. Pre-existing mirrors remain valid. +;; Disable the creation of **new** push mirrors. Pre-existing mirrors remain valid. Will be ignored if `mirror.ENABLED` is `false`. ;DISABLE_NEW_PUSH = false ;; Default interval as a duration between each check ;DEFAULT_INTERVAL = 8h diff --git a/docs/content/doc/advanced/config-cheat-sheet.en-us.md b/docs/content/doc/advanced/config-cheat-sheet.en-us.md index 8d48c2ac790d3..c63932cdc7a96 100644 --- a/docs/content/doc/advanced/config-cheat-sheet.en-us.md +++ b/docs/content/doc/advanced/config-cheat-sheet.en-us.md @@ -955,8 +955,8 @@ Task queue configuration has been moved to `queue.task`. However, the below conf ## Mirror (`mirror`) - `ENABLED`: **true**: Enables the mirror functionality. Set to **false** to disable all mirrors. -- `DISABLE_NEW_PULL`: **false**: Disable the creation of **new** mirrors. Pre-existing mirrors remain valid. -- `DISABLE_NEW_PUSH`: **false**: Disable the creation of **new** push mirrors. Pre-existing mirrors remain valid. +- `DISABLE_NEW_PULL`: **false**: Disable the creation of **new** pull mirrors. Pre-existing mirrors remain valid. Will be ignored if `mirror.ENABLED` is `false`. +- `DISABLE_NEW_PUSH`: **false**: Disable the creation of **new** push mirrors. Pre-existing mirrors remain valid. Will be ignored if `mirror.ENABLED` is `false`. - `DEFAULT_INTERVAL`: **8h**: Default interval between each check - `MIN_INTERVAL`: **10m**: Minimum interval for checking. (Must be >1m). diff --git a/routers/api/v1/repo/migrate.go b/routers/api/v1/repo/migrate.go index 9350ae520554d..87ceb547c60bf 100644 --- a/routers/api/v1/repo/migrate.go +++ b/routers/api/v1/repo/migrate.go @@ -109,7 +109,7 @@ func Migrate(ctx *context.APIContext) { gitServiceType := convert.ToGitServiceType(form.Service) if form.Mirror && setting.Mirror.DisableNewPull { - ctx.Error(http.StatusForbidden, "MirrorsGlobalDisabled", fmt.Errorf("the site administrator has disabled new mirror creations")) + ctx.Error(http.StatusForbidden, "MirrorsGlobalDisabled", fmt.Errorf("the site administrator has disabled the creation of new pull mirrors")) return } diff --git a/routers/api/v1/repo/mirror.go b/routers/api/v1/repo/mirror.go index c5a4b284c0ee1..67d0c7ee1c474 100644 --- a/routers/api/v1/repo/mirror.go +++ b/routers/api/v1/repo/mirror.go @@ -44,7 +44,7 @@ func MirrorSync(ctx *context.APIContext) { } if !setting.Mirror.Enabled { - ctx.Status(http.StatusBadRequest) + ctx.Error(http.StatusBadRequest, "MirrorSync", "Mirror feature is disabled") return } From a20a453b8f253d64b61545585ea0a308abad7868 Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Mon, 6 Sep 2021 23:58:43 +0200 Subject: [PATCH 10/10] cover edge case where gitea-admin did missunderstud how to set things --- modules/setting/mirror.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/modules/setting/mirror.go b/modules/setting/mirror.go index 2698b5bf5dbdb..b0d5b2a4dcd78 100644 --- a/modules/setting/mirror.go +++ b/modules/setting/mirror.go @@ -49,7 +49,11 @@ func newMirror() { Mirror.MinInterval = 1 * time.Minute } if Mirror.DefaultInterval < Mirror.MinInterval { - log.Warn("Mirror.DefaultInterval is less than Mirror.MinInterval, set to 8 hours") - Mirror.DefaultInterval = time.Hour * 8 + if time.Hour*8 < Mirror.MinInterval { + Mirror.DefaultInterval = Mirror.MinInterval + } else { + Mirror.DefaultInterval = time.Hour * 8 + } + log.Warn("Mirror.DefaultInterval is less than Mirror.MinInterval, set to %s", Mirror.DefaultInterval.String()) } }