finish mirror fix #63
This commit is contained in:
parent
90f6aa8cd1
commit
9ffa8a4083
4 changed files with 49 additions and 4 deletions
|
@ -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
|
||||||
|
|
|
@ -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
17
modules/cron/cron.go
Normal 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()
|
||||||
|
}
|
|
@ -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()
|
||||||
|
|
Reference in a new issue