From 4470192c70a2b3f9b10065754731a266fd5ce721 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Sat, 15 Mar 2014 00:18:09 +0800 Subject: add pure go git lib to instead cgo git lib --- models/repo2.go | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 models/repo2.go (limited to 'models/repo2.go') 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 +} -- cgit v1.2.3