"github.com/macaron-contrib/oauth2" | "github.com/macaron-contrib/oauth2" | ||||
"github.com/macaron-contrib/session" | "github.com/macaron-contrib/session" | ||||
"github.com/macaron-contrib/toolbox" | "github.com/macaron-contrib/toolbox" | ||||
"gopkg.in/ini.v1" | |||||
api "github.com/gogits/go-gogs-client" | api "github.com/gogits/go-gogs-client" | ||||
{"github.com/macaron-contrib/csrf", csrf.Version, "0.0.1"}, | {"github.com/macaron-contrib/csrf", csrf.Version, "0.0.1"}, | ||||
{"github.com/macaron-contrib/i18n", i18n.Version, "0.0.5"}, | {"github.com/macaron-contrib/i18n", i18n.Version, "0.0.5"}, | ||||
{"github.com/macaron-contrib/session", session.Version, "0.1.1"}, | {"github.com/macaron-contrib/session", session.Version, "0.1.1"}, | ||||
{"gopkg.in/ini.v1", ini.Version, "1.0.1"}, | |||||
} | } | ||||
for _, c := range checkers { | for _, c := range checkers { | ||||
ver := strings.Join(strings.Split(c.Version(), ".")[:3], ".") | ver := strings.Join(strings.Split(c.Version(), ".")[:3], ".") |
CONN = | CONN = | ||||
[git] | [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" | ; Arguments for command 'git gc', e.g.: "--aggressive --auto" | ||||
; see more on http://git-scm.com/docs/git-gc/1.7.5 | ; see more on http://git-scm.com/docs/git-gc/1.7.5 | ||||
GC_ARGS = | 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] | [i18n] | ||||
LANGS = en-US,zh-CN,zh-HK,de-DE,fr-CA,nl-NL,lv-LV | LANGS = en-US,zh-CN,zh-HK,de-DE,fr-CA,nl-NL,lv-LV | ||||
NAMES = English,简体中文,繁體中文,Deutsch,Français,Nederlands,Latviešu | NAMES = English,简体中文,繁體中文,Deutsch,Français,Nederlands,Latviešu |
isGitFscking = true | isGitFscking = true | ||||
defer func() { isGitFscking = false }() | 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), | if err := x.Where("id > 0").Iterate(new(Repository), | ||||
func(idx int, bean interface{}) error { | func(idx int, bean interface{}) error { | ||||
repo := bean.(*Repository) | repo := bean.(*Repository) | ||||
} | } | ||||
func GitGcRepos() error { | func GitGcRepos() error { | ||||
args := append([]string{"gc"}, setting.GitGcArgs...) | |||||
args := append([]string{"gc"}, setting.Git.GcArgs...) | |||||
return x.Where("id > 0").Iterate(new(Repository), | return x.Where("id > 0").Iterate(new(Repository), | ||||
func(idx int, bean interface{}) error { | func(idx int, bean interface{}) error { | ||||
repo := bean.(*Repository) | repo := bean.(*Repository) |
func NewCronContext() { | func NewCronContext() { | ||||
c.AddFunc("Update mirrors", "@every 1h", models.MirrorUpdate) | c.AddFunc("Update mirrors", "@every 1h", models.MirrorUpdate) | ||||
c.AddFunc("Deliver hooks", fmt.Sprintf("@every %dm", setting.WebhookTaskInterval), models.DeliverHooks) | 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() | c.Start() | ||||
} | } | ||||
SessionConfig session.Options | SessionConfig session.Options | ||||
// Git settings. | // 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. | // I18n settings. | ||||
Langs, Names []string | Langs, Names []string | ||||
} else { | } else { | ||||
log.Warn("No custom 'conf/app.ini' found, please go to '/install'") | 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")) | LogRootPath = Cfg.Section("log").Key("ROOT_PATH").MustString(path.Join(workDir, "log")) | ||||
} | } | ||||
DisableGravatar = sec.Key("DISABLE_GRAVATAR").MustBool() | 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(",") | Langs = Cfg.Section("i18n").Key("LANGS").Strings(",") | ||||
Names = Cfg.Section("i18n").Key("NAMES").Strings(",") | Names = Cfg.Section("i18n").Key("NAMES").Strings(",") |
commit := ctx.Repo.Commit | commit := ctx.Repo.Commit | ||||
commit.CommitMessage = string(base.RenderIssueIndexPattern([]byte(commit.CommitMessage), ctx.Repo.RepoLink)) | commit.CommitMessage = string(base.RenderIssueIndexPattern([]byte(commit.CommitMessage), ctx.Repo.RepoLink)) | ||||
diff, err := models.GetDiffCommit(models.RepoPath(userName, repoName), | diff, err := models.GetDiffCommit(models.RepoPath(userName, repoName), | ||||
commitId, setting.MaxGitDiffLines) | |||||
commitId, setting.Git.MaxGitDiffLines) | |||||
if err != nil { | if err != nil { | ||||
ctx.Handle(404, "GetDiffCommit", err) | ctx.Handle(404, "GetDiffCommit", err) | ||||
return | return | ||||
} | } | ||||
diff, err := models.GetDiffRange(models.RepoPath(userName, repoName), beforeCommitId, | diff, err := models.GetDiffRange(models.RepoPath(userName, repoName), beforeCommitId, | ||||
afterCommitId, setting.MaxGitDiffLines) | |||||
afterCommitId, setting.Git.MaxGitDiffLines) | |||||
if err != nil { | if err != nil { | ||||
ctx.Handle(404, "GetDiffRange", err) | ctx.Handle(404, "GetDiffRange", err) | ||||
return | return |