mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2024-11-10 12:49:52 +01:00
add GetReposFiles
This commit is contained in:
parent
b5cc4078a9
commit
23400dd0a2
2 changed files with 87 additions and 28 deletions
105
models/repo.go
105
models/repo.go
|
@ -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
|
||||
}
|
||||
|
||||
// .gitignore
|
||||
filePath := "conf/gitignore/" + repoLang
|
||||
if com.IsFile(filePath) {
|
||||
if _, err := com.Copy(filePath,
|
||||
filepath.Join(workdir, fileName["gitign"])); err != nil {
|
||||
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
|
||||
}
|
||||
}
|
||||
|
||||
// LICENSE
|
||||
filePath = "conf/license/" + license
|
||||
if com.IsFile(filePath) {
|
||||
if _, err := com.Copy(filePath,
|
||||
filepath.Join(workdir, fileName["license"])); 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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
|
|
|
@ -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…
Reference in a new issue