diff options
author | Lunny Xiao <xiaolunwen@gmail.com> | 2014-02-14 22:20:57 +0800 |
---|---|---|
committer | Lunny Xiao <xiaolunwen@gmail.com> | 2014-02-14 22:20:57 +0800 |
commit | 237193ef2a58d890d50e96fcc99481849c42dca9 (patch) | |
tree | 3418b87d6f631abb15678bb32dc897ba7a4dcd18 /models/repo.go | |
parent | a30e5bcaf83a82f5f7d1c89a6f9f7e52036d74af (diff) | |
download | gitea-237193ef2a58d890d50e96fcc99481849c42dca9.tar.gz gitea-237193ef2a58d890d50e96fcc99481849c42dca9.zip |
add user models
Diffstat (limited to 'models/repo.go')
-rw-r--r-- | models/repo.go | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/models/repo.go b/models/repo.go new file mode 100644 index 0000000000..8e3aae9ab4 --- /dev/null +++ b/models/repo.go @@ -0,0 +1,119 @@ +package models + +import ( + "os" + "path/filepath" + "strings" + "time" + + git "github.com/libgit2/git2go" +) + +type Repo struct { + Id int64 + OwnerId int64 `xorm:"unique(s)"` + ForkId int64 + LowerName string `xorm:"unique(s) index not null"` + Name string `xorm:"index not null"` + NumWatchs int + NumStars int + NumForks int + Created time.Time `xorm:"created"` + Updated time.Time `xorm:"updated"` +} + +// check if repository is exist +func IsRepositoryExist(user *User, reposName string) (bool, error) { + repo := Repo{OwnerId: user.Id} + // TODO: get repository by nocase name + return orm.Where("lower_name = ?", strings.ToLower(reposName)).Get(&repo) +} + +// +// create a repository for a user or orgnaziation +// +func CreateRepository(user *User, reposName string) (*Repo, 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 nil, err + } + + repo := Repo{OwnerId: user.Id, Name: reposName} + session := orm.NewSession() + defer session.Close() + session.Begin() + _, err = session.Insert(&repo) + if err != nil { + os.RemoveAll(f) + session.Rollback() + return nil, err + } + _, err = session.Exec("update user set num_repos = num_repos + 1 where id = ?", user.Id) + if err != nil { + os.RemoveAll(f) + session.Rollback() + return nil, err + } + err = session.Commit() + if err != nil { + os.RemoveAll(f) + session.Rollback() + return nil, err + } + return &repo, nil +} + +// list one user's repository +func GetRepositories(user *User) ([]Repo, error) { + repos := make([]Repo, 0) + err := orm.Find(&repos, &Repo{OwnerId: user.Id}) + return repos, err +} + +func StarReposiory(user *User, repoName string) error { + return nil +} + +func UnStarRepository() { + +} + +func WatchRepository() { + +} + +func UnWatchRepository() { + +} + +// +// delete a repository for a user or orgnaztion +// +func DeleteRepository(user *User, reposName string) error { + session := orm.NewSession() + _, err := session.Delete(&Repo{OwnerId: user.Id, Name: reposName}) + if err != nil { + session.Rollback() + return err + } + _, err = session.Exec("update user set num_repos = num_repos - 1 where id = ?", user.Id) + if err != nil { + session.Rollback() + return err + } + err = session.Commit() + if err != nil { + session.Rollback() + return err + } + + err = os.RemoveAll(filepath.Join(root, user.Name, reposName)) + if err != nil { + // TODO: log and delete manully + return err + } + return nil +} |