summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUnknwon <joe2010xtmf@163.com>2014-09-16 10:10:33 -0400
committerUnknwon <joe2010xtmf@163.com>2014-09-16 10:10:33 -0400
commit0d9c41be7d7d4ae1d2a28931be5565c8f6d3f792 (patch)
treef8fcb8c01547a7f259917bc4050a2620bca58a9d
parentc1ceec45da8c600dea2b932127519c04484258d8 (diff)
downloadgitea-0d9c41be7d7d4ae1d2a28931be5565c8f6d3f792.tar.gz
gitea-0d9c41be7d7d4ae1d2a28931be5565c8f6d3f792.zip
Work on #476
-rw-r--r--README.md2
-rw-r--r--README_ZH.md2
-rw-r--r--gogs.go2
-rw-r--r--models/repo.go9
-rw-r--r--modules/git/repo_commit.go8
-rw-r--r--modules/git/version.go70
-rw-r--r--templates/.VERSION2
7 files changed, 78 insertions, 17 deletions
diff --git a/README.md b/README.md
index 3c319896af..43d75c264b 100644
--- a/README.md
+++ b/README.md
@@ -5,7 +5,7 @@ Gogs(Go Git Service) is a painless self-hosted Git Service written in Go.
![Demo](https://gowalker.org/public/gogs_demo.gif)
-##### Current version: 0.5.0 Beta
+##### Current version: 0.5.2 Beta
### NOTICES
diff --git a/README_ZH.md b/README_ZH.md
index 7faeee2bea..bf6c1d03a1 100644
--- a/README_ZH.md
+++ b/README_ZH.md
@@ -5,7 +5,7 @@ Gogs(Go Git Service) 是一个基于 Go 语言的自助 Git 服务。
![Demo](https://gowalker.org/public/gogs_demo.gif)
-##### 当前版本:0.5.1 Beta
+##### 当前版本:0.5.2 Beta
## 开发目的
diff --git a/gogs.go b/gogs.go
index f0aebf0367..8ae7449e2b 100644
--- a/gogs.go
+++ b/gogs.go
@@ -17,7 +17,7 @@ import (
"github.com/gogits/gogs/modules/setting"
)
-const APP_VER = "0.5.1.0916 Beta"
+const APP_VER = "0.5.2.0916 Beta"
func init() {
runtime.GOMAXPROCS(runtime.NumCPU())
diff --git a/models/repo.go b/models/repo.go
index 25876872eb..a8e53dbcd7 100644
--- a/models/repo.go
+++ b/models/repo.go
@@ -95,8 +95,13 @@ func NewRepoContext() {
if err != nil {
log.Fatal(4, "Fail to get Git version: %v", err)
}
- if ver.Major < 2 && ver.Minor < 8 {
- log.Fatal(4, "Gogs requires Git version greater or equal to 1.8.0")
+
+ reqVer, err := git.ParseVersion("1.7.1")
+ if err != nil {
+ log.Fatal(4, "Fail to parse required Git version: %v", err)
+ }
+ if ver.Compare(reqVer) == -1 {
+ log.Fatal(4, "Gogs requires Git version greater or equal to 1.7.1")
}
// Check if server has basic git setting and set if not.
diff --git a/modules/git/repo_commit.go b/modules/git/repo_commit.go
index eebe3dd0e0..c9258927bb 100644
--- a/modules/git/repo_commit.go
+++ b/modules/git/repo_commit.go
@@ -137,6 +137,14 @@ func (repo *Repository) GetCommit(commitId string) (*Commit, error) {
}
func (repo *Repository) commitsCount(id sha1) (int, error) {
+ if gitVer.Compare(MustParseVersion("1.8.0")) == -1 {
+ stdout, stderr, err := com.ExecCmdDirBytes(repo.Path, "git", "log", "--pretty=format:''", id.String())
+ if err != nil {
+ return 0, errors.New(string(stderr))
+ }
+ return len(bytes.Split(stdout, []byte("\n"))), nil
+ }
+
stdout, stderr, err := com.ExecCmdDir(repo.Path, "git", "rev-list", "--count", id.String())
if err != nil {
return 0, errors.New(stderr)
diff --git a/modules/git/version.go b/modules/git/version.go
index 683e859b47..653503c03c 100644
--- a/modules/git/version.go
+++ b/modules/git/version.go
@@ -11,25 +11,24 @@ import (
"github.com/Unknwon/com"
)
+var (
+ // Cached Git version.
+ gitVer *Version
+)
+
// Version represents version of Git.
type Version struct {
Major, Minor, Patch int
}
-// GetVersion returns current Git version installed.
-func GetVersion() (Version, error) {
- stdout, stderr, err := com.ExecCmd("git", "version")
- if err != nil {
- return Version{}, errors.New(stderr)
- }
-
- infos := strings.Split(stdout, " ")
+func ParseVersion(verStr string) (*Version, error) {
+ infos := strings.Split(verStr, ".")
if len(infos) < 3 {
- return Version{}, errors.New("not enough output")
+ return nil, errors.New("incorrect version input")
}
- v := Version{}
- for i, s := range strings.Split(strings.TrimSpace(infos[2]), ".") {
+ v := &Version{}
+ for i, s := range infos {
switch i {
case 0:
v.Major, _ = com.StrTo(s).Int()
@@ -41,3 +40,52 @@ func GetVersion() (Version, error) {
}
return v, nil
}
+
+func MustParseVersion(verStr string) *Version {
+ v, _ := ParseVersion(verStr)
+ return v
+}
+
+// Compare compares two versions,
+// it returns 1 if original is greater, 1 if original is smaller, 0 if equal.
+func (v *Version) Compare(that *Version) int {
+ if v.Major > that.Major {
+ return 1
+ } else if v.Major < that.Major {
+ return -1
+ }
+
+ if v.Minor > that.Minor {
+ return 1
+ } else if v.Minor < that.Minor {
+ return -1
+ }
+
+ if v.Patch > that.Patch {
+ return 1
+ } else if v.Patch < that.Patch {
+ return -1
+ }
+
+ return 0
+}
+
+// GetVersion returns current Git version installed.
+func GetVersion() (*Version, error) {
+ if gitVer != nil {
+ return gitVer, nil
+ }
+
+ stdout, stderr, err := com.ExecCmd("git", "version")
+ if err != nil {
+ return nil, errors.New(stderr)
+ }
+
+ infos := strings.Split(stdout, " ")
+ if len(infos) < 3 {
+ return nil, errors.New("not enough output")
+ }
+
+ gitVer, err = ParseVersion(infos[2])
+ return gitVer, err
+}
diff --git a/templates/.VERSION b/templates/.VERSION
index 261667dbe1..aada89d11a 100644
--- a/templates/.VERSION
+++ b/templates/.VERSION
@@ -1 +1 @@
-0.5.1.0916 Beta \ No newline at end of file
+0.5.2.0916 Beta \ No newline at end of file