]> source.dussan.org Git - gitea.git/commitdiff
add pure go git lib to instead cgo git lib
authorLunny Xiao <xiaolunwen@gmail.com>
Fri, 14 Mar 2014 16:18:09 +0000 (00:18 +0800)
committerLunny Xiao <xiaolunwen@gmail.com>
Fri, 14 Mar 2014 16:18:09 +0000 (00:18 +0800)
models/repo.go
models/repo2.go [new file with mode: 0644]

index 26aba4a8514754220bea705e4bf2365608bc1c21..c52d0a1f24e91698ff01cabe6e2f422724ed0bdf 100644 (file)
@@ -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 (file)
index 0000000..ef0131d
--- /dev/null
@@ -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
+}