aboutsummaryrefslogtreecommitdiff
path: root/models/repo.go
diff options
context:
space:
mode:
Diffstat (limited to 'models/repo.go')
-rw-r--r--models/repo.go32
1 files changed, 31 insertions, 1 deletions
diff --git a/models/repo.go b/models/repo.go
index 569c9571..6e27a0cc 100644
--- a/models/repo.go
+++ b/models/repo.go
@@ -721,7 +721,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")
@@ -758,6 +758,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)