summaryrefslogtreecommitdiffstats
path: root/models
diff options
context:
space:
mode:
authorLunny Xiao <xiaolunwen@gmail.com>2018-03-16 22:04:33 +0800
committerGitHub <noreply@github.com>2018-03-16 22:04:33 +0800
commit9e5d0a09eb7370daedb1cf572d25ffa150eacf17 (patch)
treef39cbf6a572bda0e82caec7ef1697ceb70e37f1e /models
parent4163cdf3ea6d6ca43b694de0c15cc93659d6c2b3 (diff)
downloadgitea-9e5d0a09eb7370daedb1cf572d25ffa150eacf17.tar.gz
gitea-9e5d0a09eb7370daedb1cf572d25ffa150eacf17.zip
Global code search support (#3664)
* add global code search on explore * fix bug when no anyone public repos * change the icon * fix typo and add UnitTypeCode check for login non-admin user * fix ui description when no match
Diffstat (limited to 'models')
-rw-r--r--models/repo.go6
-rw-r--r--models/repo_list.go25
2 files changed, 31 insertions, 0 deletions
diff --git a/models/repo.go b/models/repo.go
index cddd57dc38..e9b3307d9a 100644
--- a/models/repo.go
+++ b/models/repo.go
@@ -1945,6 +1945,12 @@ func GetRepositoryByID(id int64) (*Repository, error) {
return getRepositoryByID(x, id)
}
+// GetRepositoriesMapByIDs returns the repositories by given id slice.
+func GetRepositoriesMapByIDs(ids []int64) (map[int64]*Repository, error) {
+ var repos = make(map[int64]*Repository, len(ids))
+ return repos, x.In("id", ids).Find(&repos)
+}
+
// GetUserRepositories returns a list of repositories of given user.
func GetUserRepositories(userID int64, private bool, page, pageSize int, orderBy string) ([]*Repository, error) {
if len(orderBy) == 0 {
diff --git a/models/repo_list.go b/models/repo_list.go
index bc9b831d30..df6b81cb8d 100644
--- a/models/repo_list.go
+++ b/models/repo_list.go
@@ -249,3 +249,28 @@ func SearchRepositoryByName(opts *SearchRepoOptions) (RepositoryList, int64, err
return repos, count, nil
}
+
+// FindUserAccessibleRepoIDs find all accessible repositories' ID by user's id
+func FindUserAccessibleRepoIDs(userID int64) ([]int64, error) {
+ var accessCond builder.Cond = builder.Eq{"is_private": false}
+
+ if userID > 0 {
+ accessCond = accessCond.Or(
+ builder.Eq{"owner_id": userID},
+ builder.And(
+ builder.Expr("id IN (SELECT repo_id FROM `access` WHERE access.user_id = ?)", userID),
+ builder.Neq{"owner_id": userID},
+ ),
+ )
+ }
+
+ repoIDs := make([]int64, 0, 10)
+ if err := x.
+ Table("repository").
+ Cols("id").
+ Where(accessCond).
+ Find(&repoIDs); err != nil {
+ return nil, fmt.Errorf("FindUserAccesibleRepoIDs: %v", err)
+ }
+ return repoIDs, nil
+}