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