Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
move mirror disable setting into mirror section and make it more fine…
… granular
  • Loading branch information
6543 committed Sep 5, 2021
commit bbe0302079d2f6c2455125e25a28b8a6e16a8b6c
5 changes: 5 additions & 0 deletions models/repo_pushmirror.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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
}
Expand Down
53 changes: 53 additions & 0 deletions modules/setting/mirror.go
Original file line number Diff line number Diff line change
@@ -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
}
}
24 changes: 1 addition & 23 deletions modules/setting/setting.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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 {
Expand Down
4 changes: 2 additions & 2 deletions routers/api/v1/repo/migrate.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
}

Expand Down
6 changes: 6 additions & 0 deletions routers/api/v1/repo/mirror.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
)

Expand Down Expand Up @@ -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)
Expand Down
2 changes: 1 addition & 1 deletion routers/web/org/home.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
15 changes: 9 additions & 6 deletions routers/web/repo/migrate.go
Original file line number Diff line number Diff line change
Expand Up @@ -152,17 +152,20 @@ 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() {
return
}
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)
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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...)
Expand Down
23 changes: 20 additions & 3 deletions routers/web/repo/setting.go
Original file line number Diff line number Diff line change
Expand Up @@ -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())
Expand Down Expand Up @@ -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
}
Expand Down Expand Up @@ -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
}
Expand All @@ -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)
Expand All @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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)
Expand Down
13 changes: 13 additions & 0 deletions services/mirror/mirror.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -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))
}
2 changes: 1 addition & 1 deletion templates/org/home.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
<div class="ui eleven wide column">
{{if .CanCreateOrgRepo}}
<div class="text right">
{{if not .DisabledMirrors}}
{{if not .DisableNewPullMirrors}}
<a class="ui green button" href="{{AppSubUrl}}/repo/migrate?org={{.Org.ID}}&mirror=1">{{.i18n.Tr "new_migrate"}}</a>
{{end}}
<a class="ui green button" href="{{AppSubUrl}}/repo/create?org={{.Org.ID}}">{{.i18n.Tr "new_repo"}}</a>
Expand Down
2 changes: 1 addition & 1 deletion templates/repo/migrate/options.tmpl
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<div class="inline field">
<label>{{.i18n.Tr "repo.migrate_options"}}</label>
<div class="ui checkbox">
{{if .DisableMirrors}}
{{if .DisableNewPullMirrors}}
<input id="mirror" name="mirror" type="checkbox" readonly>
<label>{{.i18n.Tr "repo.migrate_options_mirror_disabled"}}</label>
{{else}}
Expand Down
4 changes: 3 additions & 1 deletion templates/repo/settings/options.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@

</div>

{{if or .Repository.IsMirror (not .DisabledMirrors)}}
{{if .MirrorsEnabled}}
<h4 class="ui top attached header">
{{.i18n.Tr "repo.settings.mirror_settings"}}
</h4>
Expand Down Expand Up @@ -191,6 +191,7 @@
<td>{{$.i18n.Tr "repo.settings.mirror_settings.push_mirror.none"}}</td>
</tr>
{{end}}
{{if (not .DisableNewPushMirrors)}}
<tr>
<td colspan="4">
<form class="ui form" method="post">
Expand Down Expand Up @@ -227,6 +228,7 @@
</form>
</td>
</tr>
{{end}}
</tbody>
</table>
</div>
Expand Down