aboutsummaryrefslogtreecommitdiff
path: root/models/repo.go
diff options
context:
space:
mode:
Diffstat (limited to 'models/repo.go')
-rw-r--r--models/repo.go49
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)
}