Browse Source

add GetReposFiles

tags/v1.2.0-rc1
Lunny Xiao 11 years ago
parent
commit
23400dd0a2
2 changed files with 86 additions and 27 deletions
  1. +77
    -26
      models/repo.go
  2. +9
    -1
      models/user.go

+ 77
- 26
models/repo.go View 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
}


+ 9
- 1
models/user.go View 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)


Loading…
Cancel
Save