Unknwon 10 năm trước cách đây
mục cha
commit
0d9c41be7d
7 tập tin đã thay đổi với 78 bổ sung17 xóa
  1. 1 1
      README.md
  2. 1 1
      README_ZH.md
  3. 1 1
      gogs.go
  4. 7 2
      models/repo.go
  5. 8 0
      modules/git/repo_commit.go
  6. 59 11
      modules/git/version.go
  7. 1 1
      templates/.VERSION

+ 1 - 1
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
 

+ 1 - 1
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
 
 ## 开发目的
 

+ 1 - 1
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())

+ 7 - 2
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.

+ 8 - 0
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)

+ 59 - 11
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
+}

+ 1 - 1
templates/.VERSION

@@ -1 +1 @@
-0.5.1.0916 Beta
+0.5.2.0916 Beta