2019-03-16 06:12:44 +03:00
// Copyright 2019 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"
2019-03-27 12:33:00 +03:00
"code.gitea.io/gitea/modules/git"
2019-03-16 06:12:44 +03:00
"code.gitea.io/gitea/modules/log"
2019-03-27 12:33:00 +03:00
2019-03-16 06:12:44 +03:00
version "github.com/mcuadros/go-version"
)
var (
// Git settings
Git = struct {
2019-07-07 10:26:56 +03:00
Path string
2019-05-26 12:50:06 +03:00
DisableDiffHighlight bool
MaxGitDiffLines int
MaxGitDiffLineCharacters int
MaxGitDiffFiles int
2020-01-12 11:46:03 +03:00
VerbosePush bool
VerbosePushDelay time . Duration
2019-06-08 14:47:46 +03:00
GCArgs [ ] string ` ini:"GC_ARGS" delim:" " `
2019-05-26 12:50:06 +03:00
EnableAutoGitWireProtocol bool
2020-03-08 16:34:38 +03:00
PullRequestPushMessage bool
2019-05-26 12:50:06 +03:00
Timeout struct {
2019-03-16 06:12:44 +03:00
Default int
Migrate int
Mirror int
Clone int
Pull int
GC int ` ini:"GC" `
} ` ini:"git.timeout" `
} {
2019-05-26 12:50:06 +03:00
DisableDiffHighlight : false ,
MaxGitDiffLines : 1000 ,
MaxGitDiffLineCharacters : 5000 ,
MaxGitDiffFiles : 100 ,
2020-01-12 11:46:03 +03:00
VerbosePush : true ,
VerbosePushDelay : 5 * time . Second ,
2019-05-26 12:50:06 +03:00
GCArgs : [ ] string { } ,
EnableAutoGitWireProtocol : true ,
2020-03-08 16:34:38 +03:00
PullRequestPushMessage : true ,
2019-03-16 06:12:44 +03:00
Timeout : struct {
Default int
Migrate int
Mirror int
Clone int
Pull int
GC int ` ini:"GC" `
} {
Default : int ( git . DefaultCommandExecutionTimeout / time . Second ) ,
Migrate : 600 ,
Mirror : 300 ,
Clone : 300 ,
Pull : 300 ,
GC : 60 ,
} ,
}
)
func newGit ( ) {
if err := Cfg . Section ( "git" ) . 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
}
2019-07-07 10:26:56 +03:00
if err := git . SetExecutablePath ( Git . Path ) ; err != nil {
log . Fatal ( "Failed to initialize Git settings" , err )
}
2019-03-16 06:12:44 +03:00
git . DefaultCommandExecutionTimeout = time . Duration ( Git . Timeout . Default ) * time . Second
binVersion , err := git . BinVersion ( )
if err != nil {
2019-04-02 10:48:31 +03:00
log . Fatal ( "Error retrieving git version: %v" , err )
2019-03-16 06:12:44 +03:00
}
if version . Compare ( binVersion , "2.9" , ">=" ) {
// Explicitly disable credential helper, otherwise Git credentials might leak
git . GlobalCommandArgs = append ( git . GlobalCommandArgs , "-c" , "credential.helper=" )
}
2019-05-26 12:50:06 +03:00
var format = "Git Version: %s"
var args = [ ] interface { } { binVersion }
// Since git wire protocol has been released from git v2.18
if Git . EnableAutoGitWireProtocol && version . Compare ( binVersion , "2.18" , ">=" ) {
git . GlobalCommandArgs = append ( git . GlobalCommandArgs , "-c" , "protocol.version=2" )
format += ", Wire Protocol %s Enabled"
args = append ( args , "Version 2" ) // for focus color
}
log . Info ( format , args ... )
2019-03-16 06:12:44 +03:00
}