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.
This commit is contained in:
Unknwon
2017-04-06 20:58:57 -04:00
parent 90b9f7e08c
commit 8d0417497b
6 changed files with 34 additions and 9 deletions

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))
}