|  | @@ -3,3 +3,69 @@
 | 
	
		
			
				|  |  |  // license that can be found in the LICENSE file.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  package models
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +import (
 | 
	
		
			
				|  |  | +	"os"
 | 
	
		
			
				|  |  | +	"path/filepath"
 | 
	
		
			
				|  |  | +	"github.com/lunny/xorm"
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	git "github.com/libgit2/git2go"
 | 
	
		
			
				|  |  | +)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +const (
 | 
	
		
			
				|  |  | +	UserRepo = iota
 | 
	
		
			
				|  |  | +	OrgRepo
 | 
	
		
			
				|  |  | +)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +type User struct {
 | 
	
		
			
				|  |  | +	Id   int64
 | 
	
		
			
				|  |  | +	Name string `xorm:"unique"`
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +type Org struct {
 | 
	
		
			
				|  |  | +	Id int64
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +type Repo struct {
 | 
	
		
			
				|  |  | +	Id      int64
 | 
	
		
			
				|  |  | +	OwnerId int64  `xorm:"unique(s)"`
 | 
	
		
			
				|  |  | +	Type    int    `xorm:"unique(s)"`
 | 
	
		
			
				|  |  | +	Name    string `xorm:"unique(s)"`
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +var (
 | 
	
		
			
				|  |  | +	orm *xorm.Engine
 | 
	
		
			
				|  |  | +)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +//
 | 
	
		
			
				|  |  | +// create a repository for a user or orgnaziation
 | 
	
		
			
				|  |  | +//
 | 
	
		
			
				|  |  | +func CreateUserRepository(root string, user *User, reposName string) error {
 | 
	
		
			
				|  |  | +	p := filepath.Join(root, user.Name)
 | 
	
		
			
				|  |  | +	os.MkdirAll(p, os.ModePerm)
 | 
	
		
			
				|  |  | +	f := filepath.Join(p, reposName)
 | 
	
		
			
				|  |  | +	_, err := git.InitRepository(f, false)
 | 
	
		
			
				|  |  | +	if err != nil {
 | 
	
		
			
				|  |  | +		return err
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	repo := Repo{OwnerId: user.Id, Type: UserRepo, Name: reposName}
 | 
	
		
			
				|  |  | +	_, err = orm.Insert(&repo)
 | 
	
		
			
				|  |  | +	if err != nil {
 | 
	
		
			
				|  |  | +		os.RemoveAll(f)
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	return err
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +//
 | 
	
		
			
				|  |  | +// delete a repository for a user or orgnaztion
 | 
	
		
			
				|  |  | +//
 | 
	
		
			
				|  |  | +func DeleteUserRepository(root string, user *User, reposName string) error {
 | 
	
		
			
				|  |  | +	err := os.RemoveAll(filepath.Join(root, user.Name, reposName))
 | 
	
		
			
				|  |  | +	if err != nil {
 | 
	
		
			
				|  |  | +		return err
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	_, err = orm.Delete(&Repo{OwnerId: user.Id, Type: UserRepo, Name: reposName})
 | 
	
		
			
				|  |  | +	return err
 | 
	
		
			
				|  |  | +}
 |