2019-03-16 06:12:44 +03:00
// Copyright 2019 The Gitea Authors. All rights reserved.
2022-11-27 21:20:29 +03:00
// SPDX-License-Identifier: MIT
2019-03-16 06:12:44 +03:00
package setting
import (
2022-07-08 11:09:07 +03:00
"path/filepath"
2023-05-23 19:30:19 +03:00
"strings"
2019-03-16 06:12:44 +03:00
"time"
"code.gitea.io/gitea/modules/log"
)
2022-01-20 20:46:10 +03:00
// Git settings
var Git = struct {
2023-03-13 10:51:07 +03:00
Path string
HomePath string
DisableDiffHighlight bool
2023-05-28 04:07:14 +03:00
2022-01-20 20:46:10 +03:00
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" `
} ` 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" `
2019-03-16 06:12:44 +03:00
} {
2022-01-20 20:46:10 +03:00
Default : 360 ,
Migrate : 600 ,
Mirror : 300 ,
Clone : 300 ,
Pull : 300 ,
GC : 60 ,
} ,
}
2019-03-16 06:12:44 +03:00
2023-05-28 04:07:14 +03:00
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 {
2023-05-23 19:30:19 +03:00
Options : make ( map [ string ] string ) ,
}
2023-02-19 19:12:01 +03:00
func loadGitFrom ( rootCfg ConfigProvider ) {
sec := rootCfg . Section ( "git" )
2022-07-08 11:09:07 +03:00
if err := sec . MapTo ( & Git ) ; err != nil {
2019-04-02 10:48:31 +03:00
log . Fatal ( "Failed to map Git settings: %v" , err )
2019-03-16 06:12:44 +03:00
}
2022-07-08 11:09:07 +03:00
2023-05-23 19:30:19 +03:00
secGitConfig := rootCfg . Section ( "git.config" )
GitConfig . Options = make ( map [ string ] string )
2023-05-28 04:07:14 +03:00
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" } ) )
2023-05-23 19:30:19 +03:00
}
2023-05-28 04:07:14 +03:00
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 ( ) )
2023-05-23 19:30:19 +03:00
}
2022-07-08 11:09:07 +03:00
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 )
}
2019-03-16 06:12:44 +03:00
}