aboutsummaryrefslogtreecommitdiff
path: root/models
diff options
context:
space:
mode:
authorFuXiaoHei <fuxiaohei@hexiaz.com>2014-03-17 13:12:57 +0800
committerFuXiaoHei <fuxiaohei@hexiaz.com>2014-03-17 13:12:57 +0800
commitd64a8e8d3aa5f1dc606860c0950a8b7dbebf944c (patch)
tree46d4193e2706989e4bd74c7d2bcae5d365655098 /models
parentc101471bdfd0a802e66adfb7402dbd980812da30 (diff)
parent0f68930892bc49966769f8931e9a531b37dacb3b (diff)
Merge remote-tracking branch 'origin/master'
Diffstat (limited to 'models')
-rw-r--r--models/repo2.go65
1 files changed, 61 insertions, 4 deletions
diff --git a/models/repo2.go b/models/repo2.go
index e3fdc278..0c17a583 100644
--- a/models/repo2.go
+++ b/models/repo2.go
@@ -6,11 +6,22 @@ package models
import (
"path"
+ "strings"
"time"
- git "github.com/gogits/git"
+ "github.com/Unknwon/com"
+
+ "github.com/gogits/git"
)
+type Commit struct {
+ Author string
+ Email string
+ Date time.Time
+ SHA string
+ Message string
+}
+
type RepoFile struct {
*git.TreeEntry
Path string
@@ -19,10 +30,26 @@ type RepoFile struct {
Size int64
}
-func GetReposFiles(userName, reposName, branchName, rpath string) ([]*RepoFile, error) {
- f := RepoPath(userName, reposName)
+func GetBranches(userName, reposName string) ([]string, error) {
+ repo, err := git.OpenRepository(RepoPath(userName, reposName))
+ if err != nil {
+ return nil, err
+ }
- repo, err := git.OpenRepository(f)
+ refs, err := repo.AllReferences()
+ if err != nil {
+ return nil, err
+ }
+
+ brs := make([]string, len(refs))
+ for i, ref := range refs {
+ brs[i] = ref.Name
+ }
+ return brs, nil
+}
+
+func GetReposFiles(userName, reposName, branchName, rpath string) ([]*RepoFile, error) {
+ repo, err := git.OpenRepository(RepoPath(userName, reposName))
if err != nil {
return nil, err
}
@@ -69,3 +96,33 @@ func GetReposFiles(userName, reposName, branchName, rpath string) ([]*RepoFile,
return append(repodirs, repofiles...), nil
}
+
+func GetLastestCommit(userName, repoName string) (*Commit, error) {
+ stdout, _, err := com.ExecCmd("git", "--git-dir="+RepoPath(userName, repoName), "log", "-1")
+ if err != nil {
+ return nil, err
+ }
+
+ commit := new(Commit)
+ for _, line := range strings.Split(stdout, "\n") {
+ if len(line) == 0 {
+ continue
+ }
+ switch {
+ case line[0] == 'c':
+ commit.SHA = line[7:]
+ case line[0] == 'A':
+ infos := strings.SplitN(line, " ", 3)
+ commit.Author = infos[1]
+ commit.Email = infos[2][1 : len(infos[2])-1]
+ case line[0] == 'D':
+ commit.Date, err = time.Parse("Mon Jan 02 15:04:05 2006 -0700", line[8:])
+ if err != nil {
+ return nil, err
+ }
+ case line[:4] == " ":
+ commit.Message = line[4:]
+ }
+ }
+ return commit, nil
+}