mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2024-12-22 12:54:53 -05:00
824dd6bc5d
We need to shorten the timeout to bound effectively for computation size. This protects against "too big" repos. This also protects to some extent against too long lines if kept to very low values (basically so that grep cannot run out of memory beforehand). Docs-PR: forgejo/docs#812
123 lines
3.3 KiB
Go
123 lines
3.3 KiB
Go
// Copyright 2019 The Gitea Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package setting
|
|
|
|
import (
|
|
"path/filepath"
|
|
"strings"
|
|
"time"
|
|
|
|
"code.gitea.io/gitea/modules/log"
|
|
)
|
|
|
|
// Git settings
|
|
var Git = struct {
|
|
Path string
|
|
HomePath string
|
|
DisableDiffHighlight bool
|
|
|
|
MaxGitDiffLines int
|
|
MaxGitDiffLineCharacters int
|
|
MaxGitDiffFiles int
|
|
CommitsRangeSize int // CommitsRangeSize the default commits range size
|
|
BranchesRangeSize int // BranchesRangeSize the default branches range size
|
|
VerbosePush bool
|
|
VerbosePushDelay time.Duration
|
|
GCArgs []string `ini:"GC_ARGS" delim:" "`
|
|
EnableAutoGitWireProtocol bool
|
|
PullRequestPushMessage bool
|
|
LargeObjectThreshold int64
|
|
DisableCoreProtectNTFS bool
|
|
DisablePartialClone bool
|
|
Timeout struct {
|
|
Default int
|
|
Migrate int
|
|
Mirror int
|
|
Clone int
|
|
Pull int
|
|
GC int `ini:"GC"`
|
|
Grep int
|
|
} `ini:"git.timeout"`
|
|
}{
|
|
DisableDiffHighlight: false,
|
|
MaxGitDiffLines: 1000,
|
|
MaxGitDiffLineCharacters: 5000,
|
|
MaxGitDiffFiles: 100,
|
|
CommitsRangeSize: 50,
|
|
BranchesRangeSize: 20,
|
|
VerbosePush: true,
|
|
VerbosePushDelay: 5 * time.Second,
|
|
GCArgs: []string{},
|
|
EnableAutoGitWireProtocol: true,
|
|
PullRequestPushMessage: true,
|
|
LargeObjectThreshold: 1024 * 1024,
|
|
DisablePartialClone: false,
|
|
Timeout: struct {
|
|
Default int
|
|
Migrate int
|
|
Mirror int
|
|
Clone int
|
|
Pull int
|
|
GC int `ini:"GC"`
|
|
Grep int
|
|
}{
|
|
Default: 360,
|
|
Migrate: 600,
|
|
Mirror: 300,
|
|
Clone: 300,
|
|
Pull: 300,
|
|
GC: 60,
|
|
Grep: 2,
|
|
},
|
|
}
|
|
|
|
type GitConfigType struct {
|
|
Options map[string]string // git config key is case-insensitive, always use lower-case
|
|
}
|
|
|
|
func (c *GitConfigType) SetOption(key, val string) {
|
|
c.Options[strings.ToLower(key)] = val
|
|
}
|
|
|
|
func (c *GitConfigType) GetOption(key string) string {
|
|
return c.Options[strings.ToLower(key)]
|
|
}
|
|
|
|
var GitConfig = GitConfigType{
|
|
Options: make(map[string]string),
|
|
}
|
|
|
|
func loadGitFrom(rootCfg ConfigProvider) {
|
|
sec := rootCfg.Section("git")
|
|
if err := sec.MapTo(&Git); err != nil {
|
|
log.Fatal("Failed to map Git settings: %v", err)
|
|
}
|
|
|
|
secGitConfig := rootCfg.Section("git.config")
|
|
GitConfig.Options = make(map[string]string)
|
|
GitConfig.SetOption("diff.algorithm", "histogram")
|
|
GitConfig.SetOption("core.logAllRefUpdates", "true")
|
|
GitConfig.SetOption("gc.reflogExpire", "90")
|
|
|
|
secGitReflog := rootCfg.Section("git.reflog")
|
|
if secGitReflog.HasKey("ENABLED") {
|
|
deprecatedSetting(rootCfg, "git.reflog", "ENABLED", "git.config", "core.logAllRefUpdates", "1.21")
|
|
GitConfig.SetOption("core.logAllRefUpdates", secGitReflog.Key("ENABLED").In("true", []string{"true", "false"}))
|
|
}
|
|
if secGitReflog.HasKey("EXPIRATION") {
|
|
deprecatedSetting(rootCfg, "git.reflog", "EXPIRATION", "git.config", "core.reflogExpire", "1.21")
|
|
GitConfig.SetOption("gc.reflogExpire", secGitReflog.Key("EXPIRATION").String())
|
|
}
|
|
|
|
for _, key := range secGitConfig.Keys() {
|
|
GitConfig.SetOption(key.Name(), key.String())
|
|
}
|
|
|
|
Git.HomePath = sec.Key("HOME_PATH").MustString("home")
|
|
if !filepath.IsAbs(Git.HomePath) {
|
|
Git.HomePath = filepath.Join(AppDataPath, Git.HomePath)
|
|
} else {
|
|
Git.HomePath = filepath.Clean(Git.HomePath)
|
|
}
|
|
}
|