diff options
author | Lunny Xiao <xiaolunwen@gmail.com> | 2014-03-15 00:18:09 +0800 |
---|---|---|
committer | Lunny Xiao <xiaolunwen@gmail.com> | 2014-03-15 00:18:09 +0800 |
commit | 4470192c70a2b3f9b10065754731a266fd5ce721 (patch) | |
tree | db6c9d21cd8491a5244685728a7ee459d290163b /models/repo2.go | |
parent | d80f43ca816465ca112684e02d18f3184af7ff26 (diff) |
add pure go git lib to instead cgo git lib
Diffstat (limited to 'models/repo2.go')
-rw-r--r-- | models/repo2.go | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/models/repo2.go b/models/repo2.go new file mode 100644 index 00000000..ef0131d8 --- /dev/null +++ b/models/repo2.go @@ -0,0 +1,61 @@ +package models + +import ( + "path" + "time" + + git "github.com/speedata/gogit" +) + +type RepoFile struct { + Id *git.Oid + Type int + Name string + Path string + Message string + Created time.Time +} + +func (f *RepoFile) IsFile() bool { + return f.Type == git.FileModeBlob || f.Type == git.FileModeBlobExec +} + +func (f *RepoFile) IsDir() bool { + return f.Type == git.FileModeTree +} + +func GetReposFiles(userName, reposName, branchName, rpath string) ([]*RepoFile, error) { + f := RepoPath(userName, reposName) + + repo, err := git.OpenRepository(f) + if err != nil { + return nil, err + } + + ref, err := repo.LookupReference("refs/heads/" + branchName) + if err != nil { + return nil, err + } + + lastCommit, err := repo.LookupCommit(ref.Oid) + if err != nil { + return nil, err + } + + var repofiles []*RepoFile + lastCommit.Tree.Walk(func(dirname string, entry *git.TreeEntry) int { + if dirname == rpath { + repofiles = append(repofiles, &RepoFile{ + entry.Id, + entry.Filemode, + entry.Name, + path.Join(dirname, entry.Name), + lastCommit.Message(), + lastCommit.Committer.When, + }) + } + return 0 + }) + + return repofiles, nil +} |