add GetReposFiles

This commit is contained in:
Lunny Xiao 2014-03-11 18:10:19 +08:00
parent b5cc4078a9
commit 23400dd0a2
2 changed files with 87 additions and 28 deletions

View file

@ -141,28 +141,34 @@ 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
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
}
}
if repoLang != "" {
// .gitignore
filePath := "conf/gitignore/" + repoLang
if com.IsFile(filePath) {
@ -171,15 +177,18 @@ func initRepository(f string, user *User, repo *Repository, initReadme bool, rep
return err
}
}
}
if license != "" {
// LICENSE
filePath = "conf/license/" + license
filePath := "conf/license/" + license
if com.IsFile(filePath) {
if _, err := com.Copy(filePath,
filepath.Join(workdir, fileName["license"])); err != nil {
return err
}
}
}
rp, err := git.InitRepository(f, true)
if err != nil {
@ -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
}

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)