modes/mirror: make Updated unchanged if no new commits fetched (#4341)

After sync mirror, get latest commit date and compare to current
repository updated time, only update it if the commit date is newer.
master
Unknwon 2017-04-06 20:58:57 -04:00
parent 90b9f7e08c
commit 8d0417497b
No known key found for this signature in database
GPG Key ID: 25B575AE3213B2B3
6 changed files with 34 additions and 9 deletions

View File

@ -16,7 +16,7 @@ import (
"github.com/gogits/gogs/pkg/setting"
)
const APP_VER = "0.11.5.0406"
const APP_VER = "0.11.6.0406"
func init() {
setting.AppVer = APP_VER

View File

@ -184,7 +184,7 @@ func (m *Mirror) SaveAddress(addr string) error {
return fmt.Errorf("Load: %v", err)
}
cfg.Section("remote \"origin\"").Key("url").SetValue(escapeMirrorCredentials(addr))
cfg.Section(`remote "origin"`).Key("url").SetValue(escapeMirrorCredentials(addr))
return cfg.SaveToIndent(configPath, "\t")
}
@ -320,9 +320,19 @@ func SyncMirrors() {
continue
}
// Update repository last updated time
if _, err = x.Exec("UPDATE repository SET updated_unix = ? WHERE id = ?", time.Now().Unix(), m.RepoID); err != nil {
// Get latest commit date and compare to current repository updated time,
// update if latest commit date is newer.
commitDate, err := git.GetLatestCommitDate(m.Repo.RepoPath(), "")
if err != nil {
log.Error(2, "GetLatestCommitDate [%s]: %v", m.RepoID, err)
continue
} else if commitDate.Before(m.Repo.Updated) {
continue
}
if _, err = x.Exec("UPDATE repository SET updated_unix = ? WHERE id = ?", commitDate.Unix(), m.RepoID); err != nil {
log.Error(2, "Update repository 'updated_unix' [%s]: %v", m.RepoID, err)
continue
}
}
}

View File

@ -1 +1 @@
0.11.5.0406
0.11.6.0406

View File

@ -10,7 +10,7 @@ import (
"time"
)
const _VERSION = "0.6.0"
const _VERSION = "0.6.1"
func Version() string {
return _VERSION

View File

@ -278,3 +278,18 @@ func GetRepoSize(repoPath string) (*CountObject, error) {
return countObject, nil
}
// GetLatestCommitDate returns the date of latest commit of repository.
// If branch is empty, it returns the latest commit across all branches.
func GetLatestCommitDate(repoPath, branch string) (time.Time, error) {
cmd := NewCommand("for-each-ref", "--count=1", "--sort=-committerdate", "--format=%(committerdate:iso8601)")
if len(branch) > 0 {
cmd.AddArguments("refs/heads/" + branch)
}
stdout, err := cmd.RunInDir(repoPath)
if err != nil {
return time.Time{}, err
}
return time.Parse("2006-01-02 15:04:05 -0700", strings.TrimSpace(stdout))
}

6
vendor/vendor.json vendored
View File

@ -177,10 +177,10 @@
"revisionTime": "2016-08-10T03:50:02Z"
},
{
"checksumSHA1": "XT0fyELKMKgb4XeMAtIrmi4SetM=",
"checksumSHA1": "OmDPIa3NWPpl/rItpYC/Ig/m/gI=",
"path": "github.com/gogits/git-module",
"revision": "2a496cad1f36aed60b14844b33b68eb3edfc2718",
"revisionTime": "2017-04-04T05:59:12Z"
"revision": "1ebf9618c02c9480312bb55bccda7886c8d4caac",
"revisionTime": "2017-04-07T00:57:10Z"
},
{
"checksumSHA1": "D2kVXl0QpIw6t3891Sl7IM9wL+w=",