Browse Source

Optmize git-fsck options and fix #820

Unknwon 10 years ago
parent
commit
c73e9057ae
6 changed files with 32 additions and 16 deletions
  1. 2 0
      cmd/web.go
  2. 10 4
      conf/app.ini
  3. 2 2
      models/repo.go
  4. 3 1
      modules/cron/manager.go
  5. 13 7
      modules/setting/setting.go
  6. 2 2
      routers/repo/commit.go

+ 2 - 0
cmd/web.go

@@ -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], ".")

+ 10 - 4
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

+ 2 - 2
models/repo.go

@@ -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)

+ 3 - 1
modules/cron/manager.go

@@ -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()
 }
 

+ 13 - 7
modules/setting/setting.go

@@ -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(",")

+ 2 - 2
routers/repo/commit.go

@@ -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