finish mirror fix #63

This commit is contained in:
Unknown 2014-04-12 21:30:09 -04:00
parent 90f6aa8cd1
commit 9ffa8a4083
4 changed files with 49 additions and 4 deletions

View File

@ -4,22 +4,22 @@ path = github.com/gogits/gogs
[deps] [deps]
github.com/codegangsta/cli = github.com/codegangsta/cli =
github.com/go-martini/martini = github.com/go-martini/martini =
github.com/Unknwon/com =
github.com/Unknwon/cae =
github.com/Unknwon/goconfig =
github.com/nfnt/resize = github.com/nfnt/resize =
github.com/lunny/xorm = github.com/lunny/xorm =
github.com/go-sql-driver/mysql = github.com/go-sql-driver/mysql =
github.com/lib/pq = github.com/lib/pq =
github.com/qiniu/log = github.com/qiniu/log =
github.com/robfig/cron =
code.google.com/p/goauth2 = code.google.com/p/goauth2 =
github.com/Unknwon/com =
github.com/Unknwon/cae =
github.com/Unknwon/goconfig =
github.com/gogits/logs = github.com/gogits/logs =
github.com/gogits/binding = github.com/gogits/binding =
github.com/gogits/git = github.com/gogits/git =
github.com/gogits/gfm = github.com/gogits/gfm =
github.com/gogits/cache = github.com/gogits/cache =
github.com/gogits/session = github.com/gogits/session =
github.com/gogits/webdav =
[res] [res]
include = templates|public|conf include = templates|public|conf

View File

@ -130,6 +130,32 @@ type Mirror struct {
NextUpdate time.Time NextUpdate time.Time
} }
// MirrorUpdate checks and updates mirror repositories.
func MirrorUpdate() {
if err := orm.Iterate(new(Mirror), func(idx int, bean interface{}) error {
m := bean.(*Mirror)
if m.NextUpdate.After(time.Now()) {
return nil
}
repoPath := filepath.Join(base.RepoRootPath, m.RepoName+".git")
_, stderr, err := com.ExecCmdDir(repoPath, "git", "remote", "update")
if err != nil {
return err
} else if strings.Contains(stderr, "fatal:") {
return errors.New(stderr)
} else if err = git.UnpackRefs(repoPath); err != nil {
return err
}
m.NextUpdate = time.Now().Add(time.Duration(m.Interval) * time.Hour)
_, err = orm.Id(m.Id).Update(m)
return err
}); err != nil {
log.Error("repo.MirrorUpdate: %v", err)
}
}
// MirrorRepository creates a mirror repository from source. // MirrorRepository creates a mirror repository from source.
func MirrorRepository(repoId int64, userName, repoName, repoPath, url string) error { func MirrorRepository(repoId int64, userName, repoName, repoPath, url string) error {
_, stderr, err := com.ExecCmd("git", "clone", "--mirror", url, repoPath) _, stderr, err := com.ExecCmd("git", "clone", "--mirror", url, repoPath)

17
modules/cron/cron.go Normal file
View File

@ -0,0 +1,17 @@
// Copyright 2014 The Gogs 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 cron
import (
"github.com/robfig/cron"
"github.com/gogits/gogs/models"
)
func NewCronContext() {
c := cron.New()
c.AddFunc("@every 1h", models.MirrorUpdate)
c.Start()
}

View File

@ -18,6 +18,7 @@ import (
"github.com/gogits/gogs/models" "github.com/gogits/gogs/models"
"github.com/gogits/gogs/modules/auth" "github.com/gogits/gogs/modules/auth"
"github.com/gogits/gogs/modules/base" "github.com/gogits/gogs/modules/base"
"github.com/gogits/gogs/modules/cron"
"github.com/gogits/gogs/modules/log" "github.com/gogits/gogs/modules/log"
"github.com/gogits/gogs/modules/mailer" "github.com/gogits/gogs/modules/mailer"
"github.com/gogits/gogs/modules/middleware" "github.com/gogits/gogs/modules/middleware"
@ -49,6 +50,7 @@ func GlobalInit() {
} }
models.HasEngine = true models.HasEngine = true
cron.NewCronContext()
} }
base.NewServices() base.NewServices()
checkRunMode() checkRunMode()