Optmize git-fsck options and fix #820
This commit is contained in:
		
							parent
							
								
									0b56272c13
								
							
						
					
					
						commit
						c73e9057ae
					
				
					 6 changed files with 32 additions and 16 deletions
				
			
		| 
						 | 
				
			
			@ -25,6 +25,7 @@ import (
 | 
			
		|||
	"github.com/macaron-contrib/oauth2"
 | 
			
		||||
	"github.com/macaron-contrib/session"
 | 
			
		||||
	"github.com/macaron-contrib/toolbox"
 | 
			
		||||
	"gopkg.in/ini.v1"
 | 
			
		||||
 | 
			
		||||
	api "github.com/gogits/go-gogs-client"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -79,6 +80,7 @@ func checkVersion() {
 | 
			
		|||
		{"github.com/macaron-contrib/csrf", csrf.Version, "0.0.1"},
 | 
			
		||||
		{"github.com/macaron-contrib/i18n", i18n.Version, "0.0.5"},
 | 
			
		||||
		{"github.com/macaron-contrib/session", session.Version, "0.1.1"},
 | 
			
		||||
		{"gopkg.in/ini.v1", ini.Version, "1.0.1"},
 | 
			
		||||
	}
 | 
			
		||||
	for _, c := range checkers {
 | 
			
		||||
		ver := strings.Join(strings.Split(c.Version(), ".")[:3], ".")
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										14
									
								
								conf/app.ini
									
										
									
									
									
								
							
							
						
						
									
										14
									
								
								conf/app.ini
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -260,14 +260,20 @@ DRIVER =
 | 
			
		|||
CONN =
 | 
			
		||||
 | 
			
		||||
[git]
 | 
			
		||||
MAX_GITDIFF_LINES = 10000
 | 
			
		||||
; Arguments for command 'git fsck', e.g.: "--unreachable --tags"
 | 
			
		||||
; see more on http://git-scm.com/docs/git-fsck/1.7.5
 | 
			
		||||
FSCK_ARGS = 
 | 
			
		||||
MAX_GIT_DIFF_LINES = 10000
 | 
			
		||||
; Arguments for command 'git gc', e.g.: "--aggressive --auto"
 | 
			
		||||
; see more on http://git-scm.com/docs/git-gc/1.7.5
 | 
			
		||||
GC_ARGS = 
 | 
			
		||||
 | 
			
		||||
; Git health check.
 | 
			
		||||
[git.fsck]
 | 
			
		||||
ENABLE = true
 | 
			
		||||
; Execution interval in hours. Default is 24.
 | 
			
		||||
INTERVAL = 24
 | 
			
		||||
; Arguments for command 'git fsck', e.g.: "--unreachable --tags"
 | 
			
		||||
; see more on http://git-scm.com/docs/git-fsck/1.7.5
 | 
			
		||||
ARGS = 
 | 
			
		||||
 | 
			
		||||
[i18n]
 | 
			
		||||
LANGS = en-US,zh-CN,zh-HK,de-DE,fr-CA,nl-NL,lv-LV
 | 
			
		||||
NAMES = English,简体中文,繁體中文,Deutsch,Français,Nederlands,Latviešu
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1228,7 +1228,7 @@ func GitFsck() {
 | 
			
		|||
	isGitFscking = true
 | 
			
		||||
	defer func() { isGitFscking = false }()
 | 
			
		||||
 | 
			
		||||
	args := append([]string{"fsck"}, setting.GitFsckArgs...)
 | 
			
		||||
	args := append([]string{"fsck"}, setting.Git.Fsck.Args...)
 | 
			
		||||
	if err := x.Where("id > 0").Iterate(new(Repository),
 | 
			
		||||
		func(idx int, bean interface{}) error {
 | 
			
		||||
			repo := bean.(*Repository)
 | 
			
		||||
| 
						 | 
				
			
			@ -1252,7 +1252,7 @@ func GitFsck() {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
func GitGcRepos() error {
 | 
			
		||||
	args := append([]string{"gc"}, setting.GitGcArgs...)
 | 
			
		||||
	args := append([]string{"gc"}, setting.Git.GcArgs...)
 | 
			
		||||
	return x.Where("id > 0").Iterate(new(Repository),
 | 
			
		||||
		func(idx int, bean interface{}) error {
 | 
			
		||||
			repo := bean.(*Repository)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -16,7 +16,9 @@ var c = New()
 | 
			
		|||
func NewCronContext() {
 | 
			
		||||
	c.AddFunc("Update mirrors", "@every 1h", models.MirrorUpdate)
 | 
			
		||||
	c.AddFunc("Deliver hooks", fmt.Sprintf("@every %dm", setting.WebhookTaskInterval), models.DeliverHooks)
 | 
			
		||||
	c.AddFunc("Repository health check", "@every 1h", models.GitFsck)
 | 
			
		||||
	if setting.Git.Fsck.Enable {
 | 
			
		||||
		c.AddFunc("Repository health check", fmt.Sprintf("@every %dh", setting.Git.Fsck.Interval), models.GitFsck)
 | 
			
		||||
	}
 | 
			
		||||
	c.Start()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -107,9 +107,15 @@ var (
 | 
			
		|||
	SessionConfig session.Options
 | 
			
		||||
 | 
			
		||||
	// Git settings.
 | 
			
		||||
	MaxGitDiffLines int
 | 
			
		||||
	GitFsckArgs     []string
 | 
			
		||||
	GitGcArgs       []string
 | 
			
		||||
	Git struct {
 | 
			
		||||
		MaxGitDiffLines int
 | 
			
		||||
		GcArgs          []string `delim:" "`
 | 
			
		||||
		Fsck            struct {
 | 
			
		||||
			Enable   bool
 | 
			
		||||
			Interval int
 | 
			
		||||
			Args     []string `delim:" "`
 | 
			
		||||
		} `ini:"git.fsck"`
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// I18n settings.
 | 
			
		||||
	Langs, Names []string
 | 
			
		||||
| 
						 | 
				
			
			@ -174,6 +180,7 @@ func NewConfigContext() {
 | 
			
		|||
	} else {
 | 
			
		||||
		log.Warn("No custom 'conf/app.ini' found, please go to '/install'")
 | 
			
		||||
	}
 | 
			
		||||
	Cfg.NameMapper = ini.AllCapsUnderscore
 | 
			
		||||
 | 
			
		||||
	LogRootPath = Cfg.Section("log").Key("ROOT_PATH").MustString(path.Join(workDir, "log"))
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -291,10 +298,9 @@ func NewConfigContext() {
 | 
			
		|||
	}
 | 
			
		||||
	DisableGravatar = sec.Key("DISABLE_GRAVATAR").MustBool()
 | 
			
		||||
 | 
			
		||||
	sec = Cfg.Section("git")
 | 
			
		||||
	MaxGitDiffLines = sec.Key("MAX_GITDIFF_LINES").MustInt(10000)
 | 
			
		||||
	GitFsckArgs = sec.Key("FSCK_ARGS").Strings(" ")
 | 
			
		||||
	GitGcArgs = sec.Key("GC_ARGS").Strings(" ")
 | 
			
		||||
	if err = Cfg.Section("git").MapTo(&Git); err != nil {
 | 
			
		||||
		log.Fatal(4, "Fail to map Git settings: %v", err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	Langs = Cfg.Section("i18n").Key("LANGS").Strings(",")
 | 
			
		||||
	Names = Cfg.Section("i18n").Key("NAMES").Strings(",")
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -208,7 +208,7 @@ func Diff(ctx *middleware.Context) {
 | 
			
		|||
	commit := ctx.Repo.Commit
 | 
			
		||||
	commit.CommitMessage = string(base.RenderIssueIndexPattern([]byte(commit.CommitMessage), ctx.Repo.RepoLink))
 | 
			
		||||
	diff, err := models.GetDiffCommit(models.RepoPath(userName, repoName),
 | 
			
		||||
		commitId, setting.MaxGitDiffLines)
 | 
			
		||||
		commitId, setting.Git.MaxGitDiffLines)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		ctx.Handle(404, "GetDiffCommit", err)
 | 
			
		||||
		return
 | 
			
		||||
| 
						 | 
				
			
			@ -272,7 +272,7 @@ func CompareDiff(ctx *middleware.Context) {
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	diff, err := models.GetDiffRange(models.RepoPath(userName, repoName), beforeCommitId,
 | 
			
		||||
		afterCommitId, setting.MaxGitDiffLines)
 | 
			
		||||
		afterCommitId, setting.Git.MaxGitDiffLines)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		ctx.Handle(404, "GetDiffRange", err)
 | 
			
		||||
		return
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue