summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLunny Xiao <xiaolunwen@gmail.com>2014-03-15 00:18:09 +0800
committerLunny Xiao <xiaolunwen@gmail.com>2014-03-15 00:18:09 +0800
commit4470192c70a2b3f9b10065754731a266fd5ce721 (patch)
treedb6c9d21cd8491a5244685728a7ee459d290163b
parentd80f43ca816465ca112684e02d18f3184af7ff26 (diff)
downloadgitea-4470192c70a2b3f9b10065754731a266fd5ce721.tar.gz
gitea-4470192c70a2b3f9b10065754731a266fd5ce721.zip
add pure go git lib to instead cgo git lib
-rw-r--r--models/repo.go27
-rw-r--r--models/repo2.go61
2 files changed, 68 insertions, 20 deletions
diff --git a/models/repo.go b/models/repo.go
index 26aba4a851..c52d0a1f24 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 0000000000..ef0131d83e
--- /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
+}