]> source.dussan.org Git - gitea.git/commitdiff
add GetReposFiles
authorLunny Xiao <xiaolunwen@gmail.com>
Tue, 11 Mar 2014 10:10:19 +0000 (18:10 +0800)
committerLunny Xiao <xiaolunwen@gmail.com>
Tue, 11 Mar 2014 10:10:19 +0000 (18:10 +0800)
models/repo.go
models/user.go

index d4f304557c9e08e3854c362981c625a9525366fb..810f49b823b2a2047abf518532fc679a961a93ef 100644 (file)
@@ -141,43 +141,52 @@ func CreateRepository(user *User, repoName, desc, repoLang, license string, priv
 
 // InitRepository initializes README and .gitignore if needed.
 func initRepository(f string, user *User, repo *Repository, initReadme bool, repoLang, license string) error {
-       fileName := map[string]string{
-               "readme":  "README.md",
-               "gitign":  ".gitignore",
-               "license": "LICENSE",
+       fileName := map[string]string{}
+
+       if initReadme {
+               fileName["readme"] = "README.md"
+       }
+       if repoLang != "" {
+               fileName["gitign"] = ".gitignore"
        }
+       if license != "" {
+               fileName["license"] = "LICENSE"
+       }
+
        workdir := os.TempDir() + fmt.Sprintf("%d", time.Now().Nanosecond())
        os.MkdirAll(workdir, os.ModePerm)
 
-       sig := &git.Signature{
-               Name:  user.Name,
-               Email: user.Email,
-               When:  time.Now(),
-       }
+       sig := user.NewGitSig()
 
        // README
-       defaultReadme := repo.Name + "\n" + strings.Repeat("=",
-               utf8.RuneCountInString(repo.Name)) + "\n\n" + repo.Description
-       if err := ioutil.WriteFile(filepath.Join(workdir, fileName["readme"]),
-               []byte(defaultReadme), 0644); err != nil {
-               return err
+       if initReadme {
+               defaultReadme := repo.Name + "\n" + strings.Repeat("=",
+                       utf8.RuneCountInString(repo.Name)) + "\n\n" + repo.Description
+               if err := ioutil.WriteFile(filepath.Join(workdir, fileName["readme"]),
+                       []byte(defaultReadme), 0644); err != nil {
+                       return err
+               }
        }
 
-       // .gitignore
-       filePath := "conf/gitignore/" + repoLang
-       if com.IsFile(filePath) {
-               if _, err := com.Copy(filePath,
-                       filepath.Join(workdir, fileName["gitign"])); err != nil {
-                       return err
+       if repoLang != "" {
+               // .gitignore
+               filePath := "conf/gitignore/" + repoLang
+               if com.IsFile(filePath) {
+                       if _, err := com.Copy(filePath,
+                               filepath.Join(workdir, fileName["gitign"])); err != nil {
+                               return err
+                       }
                }
        }
 
-       // LICENSE
-       filePath = "conf/license/" + license
-       if com.IsFile(filePath) {
-               if _, err := com.Copy(filePath,
-                       filepath.Join(workdir, fileName["license"])); err != nil {
-                       return err
+       if license != "" {
+               // LICENSE
+               filePath := "conf/license/" + license
+               if com.IsFile(filePath) {
+                       if _, err := com.Copy(filePath,
+                               filepath.Join(workdir, fileName["license"])); err != nil {
+                               return err
+                       }
                }
        }
 
@@ -227,6 +236,48 @@ func GetRepositoryCount(user *User) (int64, error) {
        return orm.Count(&Repository{OwnerId: user.Id})
 }
 
+const (
+       RFile = iota + 1
+       RDir
+)
+
+type RepoFile struct {
+       Type int
+       Name string
+
+       Created time.Time
+}
+
+func GetReposFiles(userName, reposName, treeName, rpath string) ([]RepoFile, error) {
+       f := RepoPath(userName, reposName)
+       repo, err := git.OpenRepository(f)
+       if err != nil {
+               return nil, err
+       }
+
+       obj, err := repo.RevparseSingle("HEAD")
+       if err != nil {
+               return nil, err
+       }
+       lastCommit := obj.(*git.Commit)
+       var repofiles []RepoFile
+       tree, err := lastCommit.Tree()
+       if err != nil {
+               return nil, err
+       }
+       var i uint64 = 0
+       for ; i < tree.EntryCount(); i++ {
+               entry := tree.EntryByIndex(i)
+               repofiles = append(repofiles, RepoFile{
+                       entry.Filemode,
+                       entry.Name,
+                       time.Now(),
+               })
+       }
+
+       return repofiles, nil
+}
+
 func StarReposiory(user *User, repoName string) error {
        return nil
 }
index 95cebb1812d631b563cb0d0f8d90ac16392fde0c..05169e46996398ba18873a32b00a7fd3d21fd457 100644 (file)
@@ -13,8 +13,8 @@ import (
        "time"
 
        "github.com/dchest/scrypt"
-
        "github.com/gogits/gogs/modules/base"
+       git "github.com/libgit2/git2go"
 )
 
 var UserPasswdSalt string
@@ -98,6 +98,14 @@ func IsEmailUsed(email string) (bool, error) {
        return orm.Get(&User{Email: email})
 }
 
+func (user *User) NewGitSig() *git.Signature {
+       return &git.Signature{
+               Name:  user.Name,
+               Email: user.Email,
+               When:  time.Now(),
+       }
+}
+
 // RegisterUser creates record of a new user.
 func RegisterUser(user *User) (err error) {
        isExist, err := IsUserExist(user.Name)