Work on #476
This commit is contained in:
		
							parent
							
								
									c1ceec45da
								
							
						
					
					
						commit
						0d9c41be7d
					
				
					 7 changed files with 78 additions and 17 deletions
				
			
		|  | @ -5,7 +5,7 @@ Gogs(Go Git Service) is a painless self-hosted Git Service written in Go. | |||
| 
 | ||||
|  | ||||
| 
 | ||||
| ##### Current version: 0.5.0 Beta | ||||
| ##### Current version: 0.5.2 Beta | ||||
| 
 | ||||
| ### NOTICES | ||||
| 
 | ||||
|  |  | |||
|  | @ -5,7 +5,7 @@ Gogs(Go Git Service) 是一个基于 Go 语言的自助 Git 服务。 | |||
| 
 | ||||
|  | ||||
| 
 | ||||
| ##### 当前版本:0.5.1 Beta | ||||
| ##### 当前版本:0.5.2 Beta | ||||
| 
 | ||||
| ## 开发目的 | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										2
									
								
								gogs.go
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								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()) | ||||
|  |  | |||
|  | @ -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.
 | ||||
|  |  | |||
|  | @ -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) | ||||
|  |  | |||
|  | @ -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 @@ | |||
| 0.5.1.0916 Beta | ||||
| 0.5.2.0916 Beta | ||||
		Loading…
	
		Reference in a new issue