From 4470192c70a2b3f9b10065754731a266fd5ce721 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Sat, 15 Mar 2014 00:18:09 +0800 Subject: [PATCH] add pure go git lib to instead cgo git lib --- models/repo.go | 27 ++++++---------------- models/repo2.go | 61 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+), 20 deletions(-) create mode 100644 models/repo2.go diff --git a/models/repo.go b/models/repo.go index 26aba4a8..c52d0a1f 100644 --- a/models/repo.go +++ b/models/repo.go @@ -9,7 +9,6 @@ import ( "fmt" "io/ioutil" "os" - "path" "path/filepath" "strings" "time" @@ -262,11 +261,7 @@ func GetRepositoryCount(user *User) (int64, error) { return orm.Count(&Repository{OwnerId: user.Id}) } -const ( - RFile = iota + 1 - RDir -) - +/* type RepoFile struct { Id *git.Oid Type int @@ -282,15 +277,19 @@ func (f *RepoFile) IsFile() bool { 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 } + repo.LookupReference("refs/heads/" + branchName) + obj, err := repo.RevparseSingle("HEAD") if err != nil { return nil, err @@ -322,20 +321,8 @@ func GetReposFiles(userName, reposName, branchName, rpath string) ([]*RepoFile, return 0 }) - /*for ; i < tree.EntryCount(); i++ { - entry := tree.EntryByIndex(i) - - repofiles = append(repofiles, &RepoFile{ - entry.Id, - entry.Filemode, - entry.Name, - lastCommit.Message(), - lastCommit.Committer().When, - }) - }*/ - return repofiles, nil -} +}*/ func StarReposiory(user *User, repoName string) error { return nil 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 +}