diff --git a/controllers/system_info.go b/controllers/system_info.go index 8d52e9ec..de349f54 100644 --- a/controllers/system_info.go +++ b/controllers/system_info.go @@ -26,8 +26,9 @@ type SystemInfo struct { } type GitRepoInfo struct { - Commit string `json:"commit"` - Version string `json:"version"` + AheadCnt int `json:"ahead_cnt"` + Commit string `json:"commit"` + Version string `json:"version"` } // GetSystemInfo @@ -76,15 +77,16 @@ func (c *ApiController) GetSystemInfo() { // @Success 200 {string} local latest version hash of casdoor // @router /get-release [get] func (c *ApiController) GitRepoVersion() { - commit, version, err := util.GetGitRepoVersion() + aheadCnt, commit, version, err := util.GetGitRepoVersion() if err != nil { c.ResponseError(err.Error()) return } c.Data["json"] = GitRepoInfo{ - Commit: commit, - Version: version, + AheadCnt: aheadCnt, + Commit: commit, + Version: version, } c.ServeJSON() } diff --git a/util/system.go b/util/system.go index 2a902784..9abc301b 100644 --- a/util/system.go +++ b/util/system.go @@ -48,20 +48,20 @@ func GetMemoryUsage() (uint64, uint64, error) { } // get github current commit and repo release version -func GetGitRepoVersion() (string, string, error) { +func GetGitRepoVersion() (int, string, string, error) { _, filename, _, _ := runtime.Caller(0) rootPath := path.Dir(path.Dir(filename)) r, err := git.PlainOpen(rootPath) if err != nil { - return "", "", err + return -1, "", "", err } ref, err := r.Head() if err != nil { - return "", "", err + return -1, "", "", err } tags, err := r.Tags() if err != nil { - return "", "", err + return -1, "", "", err } tagMap := make(map[plumbing.Hash]string) err = tags.ForEach(func(t *plumbing.Reference) error { @@ -74,11 +74,12 @@ func GetGitRepoVersion() (string, string, error) { return nil }) if err != nil { - return "", "", err + return -1, "", "", err } cIter, err := r.Log(&git.LogOptions{From: ref.Hash()}) + aheadCnt := 0 releaseVersion := "" // iterates over the commits err = cIter.ForEach(func(c *object.Commit) error { @@ -88,11 +89,14 @@ func GetGitRepoVersion() (string, string, error) { releaseVersion = tag } } + if releaseVersion == "" { + aheadCnt++ + } return nil }) if err != nil { - return "", "", err + return -1, "", "", err } - return ref.Hash().String(), releaseVersion, nil + return aheadCnt, ref.Hash().String(), releaseVersion, nil } diff --git a/util/sysytem_test.go b/util/sysytem_test.go index 41dfa482..2c206b47 100644 --- a/util/sysytem_test.go +++ b/util/sysytem_test.go @@ -41,15 +41,15 @@ func TestGetMemoryUsage(t *testing.T) { } func TestGetGitRepoVersion(t *testing.T) { - commit, version, err := GetGitRepoVersion() + aheadCnt, commit, version, err := GetGitRepoVersion() assert.Nil(t, err) - t.Log(commit, version) + t.Log(aheadCnt, commit, version) } func TestGetVersion(t *testing.T) { _, filename, _, _ := runtime.Caller(0) - rootPath := path.Dir(path.Dir(filename)) - r, err := git.PlainOpen(rootPath) + root := path.Dir(path.Dir(filename)) + r, err := git.PlainOpen(root) if err != nil { t.Log(err) } @@ -68,9 +68,10 @@ func TestGetVersion(t *testing.T) { return nil }) - testHash := plumbing.NewHash("16b1d0e1f001c1162a263ed50c1a892c947d5783") + testHash := plumbing.NewHash("f8bc87eb4e5ba3256424cf14aafe0549f812f1cf") cIter, err := r.Log(&git.LogOptions{From: testHash}) + aheadCnt := 0 releaseVersion := "" // iterates over the commits err = cIter.ForEach(func(c *object.Commit) error { @@ -80,7 +81,12 @@ func TestGetVersion(t *testing.T) { releaseVersion = tag } } + if releaseVersion == "" { + aheadCnt++ + } return nil }) - assert.Equal(t, "v1.260.0", releaseVersion) + + assert.Equal(t, 3, aheadCnt) + assert.Equal(t, "v1.257.0", releaseVersion) }