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)
|
||||||
|
}
|
||||||
|
}
|
Reference in a new issue