add createrepository & deleterepository
This commit is contained in:
		
							parent
							
								
									b5ba387891
								
							
						
					
					
						commit
						a30e5bcaf8
					
				
					 2 changed files with 96 additions and 0 deletions
				
			
		|  | @ -3,3 +3,69 @@ | ||||||
| // license that can be found in the LICENSE file.
 | // license that can be found in the LICENSE file.
 | ||||||
| 
 | 
 | ||||||
| package models | 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 | ||||||
|  | } | ||||||
|  |  | ||||||
							
								
								
									
										30
									
								
								models/models_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								models/models_test.go
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,30 @@ | ||||||
|  | package models | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"fmt" | ||||||
|  | 	"testing" | ||||||
|  | 
 | ||||||
|  | 	"github.com/lunny/xorm" | ||||||
|  | 	_ "github.com/mattn/go-sqlite3" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | func init() { | ||||||
|  | 	var err error | ||||||
|  | 	orm, err = xorm.NewEngine("sqlite3", "./test.db") | ||||||
|  | 	if err != nil { | ||||||
|  | 		fmt.Println(err) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	err = orm.Sync(&User{}, &Org{}, &Repo{}) | ||||||
|  | 	if err != nil { | ||||||
|  | 		fmt.Println(err) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func TestCreateRepository(t *testing.T) { | ||||||
|  | 	user := User{Id: 1} | ||||||
|  | 	err := CreateUserRepository("test", &user, "test") | ||||||
|  | 	if err != nil { | ||||||
|  | 		t.Error(err) | ||||||
|  | 	} | ||||||
|  | } | ||||||
		Loading…
	
		Reference in a new issue