mirror of
https://github.com/hanzoai/forge.git
synced 2026-10-30 15:00:39 +00:00
Source files keep their SPDX-License-Identifier and Hanzo copyright line; the Gitea, Gogs and LFS Test Server copyrights they used to repeat now live once in NOTICE, alongside LICENSE. The header lint accepts any copyright line above the SPDX line, so it no longer demands an upstream one. Co-authored-by: Hanzo Dev <[email protected]>
120 lines
3.6 KiB
Go
120 lines
3.6 KiB
Go
// Copyright 2026 Hanzo AI, Inc. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package setting
|
|
|
|
import (
|
|
"path/filepath"
|
|
"regexp"
|
|
"strings"
|
|
"time"
|
|
|
|
"github.com/hanzoai/git/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
|
|
DiffRenameSimilarityThreshold string
|
|
Timeout struct {
|
|
Migrate int
|
|
Mirror int
|
|
GC int `ini:"GC"`
|
|
} `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,
|
|
DiffRenameSimilarityThreshold: "50%",
|
|
Timeout: struct {
|
|
Migrate int
|
|
Mirror int
|
|
GC int `ini:"GC"`
|
|
}{
|
|
Migrate: 600,
|
|
Mirror: 300,
|
|
GC: 60,
|
|
},
|
|
}
|
|
|
|
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)
|
|
}
|
|
|
|
// validate for a integer percentage between 0% and 100%
|
|
if !regexp.MustCompile(`^([0-9]|[1-9][0-9]|100)%$`).MatchString(Git.DiffRenameSimilarityThreshold) {
|
|
log.Fatal("Invalid git.DIFF_RENAME_SIMILARITY_THRESHOLD: %s", Git.DiffRenameSimilarityThreshold)
|
|
}
|
|
}
|