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,43 +141,52 @@ func CreateRepository(user *User, repoName, desc, repoLang, license string, priv
// InitRepository initializes README and .gitignore if needed. // InitRepository initializes README and .gitignore if needed.
func initRepository(f string, user *User, repo *Repository, initReadme bool, repoLang, license string) error { func initRepository(f string, user *User, repo *Repository, initReadme bool, repoLang, license string) error {
fileName := map[string]string{ fileName := map[string]string{}
"readme": "README.md",
"gitign": ".gitignore", if initReadme {
"license": "LICENSE", fileName["readme"] = "README.md"
} }
if repoLang != "" {
fileName["gitign"] = ".gitignore"
}
if license != "" {
fileName["license"] = "LICENSE"
}
workdir := os.TempDir() + fmt.Sprintf("%d", time.Now().Nanosecond()) workdir := os.TempDir() + fmt.Sprintf("%d", time.Now().Nanosecond())
os.MkdirAll(workdir, os.ModePerm) os.MkdirAll(workdir, os.ModePerm)
sig := &git.Signature{ sig := user.NewGitSig()
Name: user.Name,
Email: user.Email,
When: time.Now(),
}
// README // README
defaultReadme := repo.Name + "\n" + strings.Repeat("=", if initReadme {
utf8.RuneCountInString(repo.Name)) + "\n\n" + repo.Description defaultReadme := repo.Name + "\n" + strings.Repeat("=",
if err := ioutil.WriteFile(filepath.Join(workdir, fileName["readme"]), utf8.RuneCountInString(repo.Name)) + "\n\n" + repo.Description
[]byte(defaultReadme), 0644); err != nil { if err := ioutil.WriteFile(filepath.Join(workdir, fileName["readme"]),
return err []byte(defaultReadme), 0644); err != nil {
}
// .gitignore
filePath := "conf/gitignore/" + repoLang
if com.IsFile(filePath) {
if _, err := com.Copy(filePath,
filepath.Join(workdir, fileName["gitign"])); err != nil {
return err return err
} }
} }
// LICENSE if repoLang != "" {
filePath = "conf/license/" + license // .gitignore
if com.IsFile(filePath) { filePath := "conf/gitignore/" + repoLang
if _, err := com.Copy(filePath, if com.IsFile(filePath) {
filepath.Join(workdir, fileName["license"])); err != nil { if _, err := com.Copy(filePath,
return err filepath.Join(workdir, fileName["gitign"])); 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}) 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 { func StarReposiory(user *User, repoName string) error {
return nil return nil
} }

View file

@ -13,8 +13,8 @@ import (
"time" "time"
"github.com/dchest/scrypt" "github.com/dchest/scrypt"
"github.com/gogits/gogs/modules/base" "github.com/gogits/gogs/modules/base"
git "github.com/libgit2/git2go"
) )
var UserPasswdSalt string var UserPasswdSalt string
@ -98,6 +98,14 @@ func IsEmailUsed(email string) (bool, error) {
return orm.Get(&User{Email: email}) 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. // RegisterUser creates record of a new user.
func RegisterUser(user *User) (err error) { func RegisterUser(user *User) (err error) {
isExist, err := IsUserExist(user.Name) isExist, err := IsUserExist(user.Name)