]> source.dussan.org Git - gitea.git/commitdiff
Optmize git-fsck options and fix #820
authorUnknwon <joe2010xtmf@163.com>
Fri, 2 Jan 2015 12:14:43 +0000 (20:14 +0800)
committerUnknwon <joe2010xtmf@163.com>
Fri, 2 Jan 2015 12:14:43 +0000 (20:14 +0800)
cmd/web.go
conf/app.ini
models/repo.go
modules/cron/manager.go
modules/setting/setting.go
routers/repo/commit.go

index 51f146f374cef42679c59229d9c3ced8d28ef81c..3c25b9df22c679a36763b2c135cb3df8c01cd86a 100644 (file)
@@ -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], ".")
index 467b430365549397a04ce47d97cdc4263378e754..c191d105cda369f98d2cd1089369cb4c8996fef6 100644 (file)
@@ -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
index 77c4b140db8a9aa7326514926a420b815dbc4b1d..65689b6a1e2fa16c280e7151b2f359681e24d932 100644 (file)
@@ -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)
index 49b1a99cee6896076e48dbeac96fc4a6f7918935..135fec4faa7605a5e461ac609f9d4f97dea6b30c 100644 (file)
@@ -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()
 }
 
index c4d3d3a6c24d76f4c84625fcf0cb58f1ddcf4680..bc9da3c63a6ab7436a941f018533c6c86bb33025 100644 (file)
@@ -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(",")
index 619c6c815c102bfcc760014d81a7e26571feac18..4571b24f2a5ebba4459c6eef2d7c4e1e8d17d9dc 100644 (file)
@@ -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