]> source.dussan.org Git - gitea.git/commitdiff
finish mirror fix #63
authorUnknown <joe2010xtmf@163.com>
Sun, 13 Apr 2014 01:30:09 +0000 (21:30 -0400)
committerUnknown <joe2010xtmf@163.com>
Sun, 13 Apr 2014 01:30:09 +0000 (21:30 -0400)
.gopmfile
models/repo.go
modules/cron/cron.go [new file with mode: 0644]
routers/install.go

index c9fad8a036d8d0c7ff6e8e637e91a65b49b93bde..d7eeef0782921588f5800963b24f8d9cf09beee3 100644 (file)
--- a/.gopmfile
+++ b/.gopmfile
@@ -4,22 +4,22 @@ path = github.com/gogits/gogs
 [deps]
 github.com/codegangsta/cli = 
 github.com/go-martini/martini = 
-github.com/Unknwon/com = 
-github.com/Unknwon/cae = 
-github.com/Unknwon/goconfig = 
 github.com/nfnt/resize = 
 github.com/lunny/xorm = 
 github.com/go-sql-driver/mysql = 
 github.com/lib/pq = 
 github.com/qiniu/log = 
+github.com/robfig/cron = 
 code.google.com/p/goauth2 = 
+github.com/Unknwon/com = 
+github.com/Unknwon/cae = 
+github.com/Unknwon/goconfig = 
 github.com/gogits/logs = 
 github.com/gogits/binding = 
 github.com/gogits/git = 
 github.com/gogits/gfm = 
 github.com/gogits/cache = 
 github.com/gogits/session = 
-github.com/gogits/webdav = 
 
 [res]
 include = templates|public|conf
index a2c63a50c9ca9825fafb3825865e2f206c71e62d..ae8fe5efd149f7591190ed4566f951d9eb9fb18a 100644 (file)
@@ -130,6 +130,32 @@ type Mirror struct {
        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.
 func MirrorRepository(repoId int64, userName, repoName, repoPath, url string) error {
        _, stderr, err := com.ExecCmd("git", "clone", "--mirror", url, repoPath)
diff --git a/modules/cron/cron.go b/modules/cron/cron.go
new file mode 100644 (file)
index 0000000..27b1fc4
--- /dev/null
@@ -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()
+}
index 76c03f05296c1eb4f347db9ead9001f92385ce48..d66f5b39b635d1db18bedc0e6655e2dc6df69ded 100644 (file)
@@ -18,6 +18,7 @@ import (
        "github.com/gogits/gogs/models"
        "github.com/gogits/gogs/modules/auth"
        "github.com/gogits/gogs/modules/base"
+       "github.com/gogits/gogs/modules/cron"
        "github.com/gogits/gogs/modules/log"
        "github.com/gogits/gogs/modules/mailer"
        "github.com/gogits/gogs/modules/middleware"
@@ -49,6 +50,7 @@ func GlobalInit() {
                }
 
                models.HasEngine = true
+               cron.NewCronContext()
        }
        base.NewServices()
        checkRunMode()