diff options
Diffstat (limited to 'models/repo.go')
-rw-r--r-- | models/repo.go | 135 |
1 files changed, 104 insertions, 31 deletions
diff --git a/models/repo.go b/models/repo.go index e97164d2..4382bd7d 100644 --- a/models/repo.go +++ b/models/repo.go @@ -18,6 +18,7 @@ import ( "github.com/Unknwon/cae/zip" "github.com/Unknwon/com" + qlog "github.com/qiniu/log" "github.com/gogits/git" @@ -39,8 +40,38 @@ var ( ) func LoadRepoConfig() { - LanguageIgns = strings.Split(base.Cfg.MustValue("repository", "LANG_IGNS"), "|") - Licenses = strings.Split(base.Cfg.MustValue("repository", "LICENSES"), "|") + workDir, err := base.ExecDir() + if err != nil { + qlog.Fatalf("Fail to get work directory: %s\n", err) + } + + // Load .gitignore and license files. + types := []string{"gitignore", "license"} + typeFiles := make([][]string, 2) + for i, t := range types { + cfgPath := filepath.Join(workDir, "conf", t) + files, err := com.StatDir(cfgPath) + if err != nil { + qlog.Fatalf("Fail to get default %s files: %v\n", t, err) + } + cfgPath = filepath.Join(workDir, "custom/conf/gitignore") + if com.IsDir(cfgPath) { + customFiles, err := com.StatDir(cfgPath) + if err != nil { + qlog.Fatalf("Fail to get custom %s files: %v\n", t, err) + } + + for _, f := range customFiles { + if !com.IsSliceContainsStr(files, f) { + files = append(files, f) + } + } + } + typeFiles[i] = files + } + + LanguageIgns = typeFiles[0] + Licenses = typeFiles[1] } func NewRepoContext() { @@ -49,43 +80,43 @@ func NewRepoContext() { // Check if server has basic git setting. stdout, stderr, err := com.ExecCmd("git", "config", "--get", "user.name") if strings.Contains(stderr, "fatal:") { - fmt.Printf("repo.NewRepoContext(fail to get git user.name): %s", stderr) - os.Exit(2) + qlog.Fatalf("repo.NewRepoContext(fail to get git user.name): %s", stderr) } else if err != nil || len(strings.TrimSpace(stdout)) == 0 { if _, stderr, err = com.ExecCmd("git", "config", "--global", "user.email", "gogitservice@gmail.com"); err != nil { - fmt.Printf("repo.NewRepoContext(fail to set git user.email): %s", stderr) - os.Exit(2) + qlog.Fatalf("repo.NewRepoContext(fail to set git user.email): %s", stderr) } else if _, stderr, err = com.ExecCmd("git", "config", "--global", "user.name", "Gogs"); err != nil { - fmt.Printf("repo.NewRepoContext(fail to set git user.name): %s", stderr) - os.Exit(2) + qlog.Fatalf("repo.NewRepoContext(fail to set git user.name): %s", stderr) } } } // Repository represents a git repository. type Repository struct { - Id int64 - OwnerId int64 `xorm:"unique(s)"` - Owner *User `xorm:"-"` - ForkId int64 - LowerName string `xorm:"unique(s) index not null"` - Name string `xorm:"index not null"` - Description string - Website string - NumWatches int - NumStars int - NumForks int - NumIssues int - NumClosedIssues int - NumOpenIssues int `xorm:"-"` - NumTags int `xorm:"-"` - IsPrivate bool - IsMirror bool - IsBare bool - IsGoget bool - DefaultBranch string - Created time.Time `xorm:"created"` - Updated time.Time `xorm:"updated"` + Id int64 + OwnerId int64 `xorm:"unique(s)"` + Owner *User `xorm:"-"` + ForkId int64 + LowerName string `xorm:"unique(s) index not null"` + Name string `xorm:"index not null"` + Description string + Website string + NumWatches int + NumStars int + NumForks int + NumIssues int + NumClosedIssues int + NumOpenIssues int `xorm:"-"` + NumMilestones int `xorm:"NOT NULL DEFAULT 0"` + NumClosedMilestones int `xorm:"NOT NULL DEFAULT 0"` + NumOpenMilestones int `xorm:"-"` + NumTags int `xorm:"-"` + IsPrivate bool + IsMirror bool + IsBare bool + IsGoget bool + DefaultBranch string + Created time.Time `xorm:"created"` + Updated time.Time `xorm:"updated"` } func (repo *Repository) GetOwner() (err error) { @@ -645,6 +676,18 @@ func DeleteRepository(userId, repoId int64, userName string) (err error) { sess.Rollback() return err } + if _, err = sess.Delete(&Issue{RepoId: repoId}); err != nil { + sess.Rollback() + return err + } + if _, err = sess.Delete(&IssueUser{RepoId: repoId}); err != nil { + sess.Rollback() + return err + } + if _, err = sess.Delete(&Milestone{RepoId: repoId}); err != nil { + sess.Rollback() + return err + } rawSql := "UPDATE `user` SET num_repos = num_repos - 1 WHERE id = ?" if _, err = sess.Exec(rawSql, userId); err != nil { @@ -690,7 +733,7 @@ func GetRepositoryById(id int64) (*Repository, error) { return repo, nil } -// GetRepositories returns the list of repositories of given user. +// GetRepositories returns a list of repositories of given user. func GetRepositories(user *User, private bool) ([]*Repository, error) { repos := make([]*Repository, 0, 10) sess := orm.Desc("updated") @@ -727,6 +770,36 @@ func GetCollaboratorNames(repoName string) ([]string, error) { return names, nil } +// GetCollaborativeRepos returns a list of repositories that user is collaborator. +func GetCollaborativeRepos(uname string) ([]*Repository, error) { + uname = strings.ToLower(uname) + accesses := make([]*Access, 0, 10) + if err := orm.Find(&accesses, &Access{UserName: uname}); err != nil { + return nil, err + } + + repos := make([]*Repository, 0, 10) + for _, access := range accesses { + if strings.HasPrefix(access.RepoName, uname) { + continue + } + + infos := strings.Split(access.RepoName, "/") + u, err := GetUserByName(infos[0]) + if err != nil { + return nil, err + } + + repo, err := GetRepositoryByName(u.Id, infos[1]) + if err != nil { + return nil, err + } + repo.Owner = u + repos = append(repos, repo) + } + return repos, nil +} + // GetCollaborators returns a list of users of repository's collaborators. func GetCollaborators(repoName string) (us []*User, err error) { accesses := make([]*Access, 0, 10) |