|
@@ -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)
|
|
|
}
|
|
|
|