diff options
Diffstat (limited to 'models/repo.go')
-rw-r--r-- | models/repo.go | 49 |
1 files changed, 42 insertions, 7 deletions
diff --git a/models/repo.go b/models/repo.go index e6f12b2f..f9e52682 100644 --- a/models/repo.go +++ b/models/repo.go @@ -1055,6 +1055,34 @@ func RepositoriesWithUsers(page, pageSize int) (_ []*Repository, err error) { return repos, nil } +// FilterRepositoryWithIssues selects repositories that are using interal issue tracker +// and has disabled external tracker from given set. +// It returns nil if result set is empty. +func FilterRepositoryWithIssues(repoIDs []int64) ([]int64, error) { + if len(repoIDs) == 0 { + return nil, nil + } + + repos := make([]*Repository, 0, len(repoIDs)) + if err := x.Where("enable_issues=?", true). + And("enable_external_tracker=?", false). + In("id", repoIDs). + Cols("id"). + Find(&repos); err != nil { + return nil, fmt.Errorf("filter valid repositories %v: %v", repoIDs, err) + } + + if len(repos) == 0 { + return nil, nil + } + + repoIDs = make([]int64, len(repos)) + for i := range repos { + repoIDs[i] = repos[i].ID + } + return repoIDs, nil +} + // RepoPath returns repository path by given user and repository name. func RepoPath(userName, repoName string) string { return filepath.Join(UserPath(userName), strings.ToLower(repoName)+".git") @@ -1454,19 +1482,26 @@ func GetRepositoryByID(id int64) (*Repository, error) { return getRepositoryByID(x, id) } +type UserRepoOptions struct { + UserID int64 + Private bool + Page int + PageSize int +} + // GetUserRepositories returns a list of repositories of given user. -func GetUserRepositories(userID int64, private bool, page, pageSize int) ([]*Repository, error) { - sess := x.Where("owner_id = ?", userID).Desc("updated_unix") - if !private { +func GetUserRepositories(opts *UserRepoOptions) ([]*Repository, error) { + sess := x.Where("owner_id=?", opts.UserID).Desc("updated_unix") + if !opts.Private { sess.And("is_private=?", false) } - if page <= 0 { - page = 1 + if opts.Page <= 0 { + opts.Page = 1 } - sess.Limit(pageSize, (page-1)*pageSize) + sess.Limit(opts.PageSize, (opts.Page-1)*opts.PageSize) - repos := make([]*Repository, 0, pageSize) + repos := make([]*Repository, 0, opts.PageSize) return repos, sess.Find(&repos) } |