|
@@ -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
|
|
|
+}
|