mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-11-04 12:53:43 +01:00 
			
		
		
		
	add GetReposFiles
This commit is contained in:
		
							parent
							
								
									b5cc4078a9
								
							
						
					
					
						commit
						23400dd0a2
					
				
							
								
								
									
										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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user