summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--models/repo_list.go50
-rw-r--r--routers/home.go24
-rw-r--r--routers/user/profile.go15
3 files changed, 47 insertions, 42 deletions
diff --git a/models/repo_list.go b/models/repo_list.go
index 905408ae6b..15e6144d06 100644
--- a/models/repo_list.go
+++ b/models/repo_list.go
@@ -120,10 +120,12 @@ func SearchRepositoryByName(opts *SearchRepoOptions) (repos RepositoryList, coun
opts.Page = 1
}
+ var starJoin bool
if opts.Starred && opts.OwnerID > 0 {
cond = builder.Eq{
"star.uid": opts.OwnerID,
}
+ starJoin = true
}
opts.Keyword = strings.ToLower(opts.Keyword)
@@ -133,34 +135,34 @@ func SearchRepositoryByName(opts *SearchRepoOptions) (repos RepositoryList, coun
// Append conditions
if !opts.Starred && opts.OwnerID > 0 {
- cond = cond.And(builder.Eq{"owner_id": opts.OwnerID})
+ var searcherReposCond builder.Cond = builder.Eq{"owner_id": opts.OwnerID}
+ if opts.Searcher != nil {
+ var ownerIds []int64
+
+ ownerIds = append(ownerIds, opts.Searcher.ID)
+ err = opts.Searcher.GetOrganizations(true)
+
+ if err != nil {
+ return nil, 0, fmt.Errorf("Organization: %v", err)
+ }
+
+ for _, org := range opts.Searcher.Orgs {
+ ownerIds = append(ownerIds, org.ID)
+ }
+
+ searcherReposCond = searcherReposCond.Or(builder.In("owner_id", ownerIds))
+ if opts.Collaborate {
+ searcherReposCond = searcherReposCond.Or(builder.Expr("id IN (SELECT repo_id FROM `access` WHERE access.user_id = ? AND owner_id != ?)",
+ opts.Searcher.ID, opts.Searcher.ID))
+ }
+ }
+ cond = cond.And(searcherReposCond)
}
+
if !opts.Private {
cond = cond.And(builder.Eq{"is_private": false})
}
- if opts.Searcher != nil {
- var ownerIds []int64
-
- ownerIds = append(ownerIds, opts.Searcher.ID)
- err = opts.Searcher.GetOrganizations(true)
-
- if err != nil {
- return nil, 0, fmt.Errorf("Organization: %v", err)
- }
-
- for _, org := range opts.Searcher.Orgs {
- ownerIds = append(ownerIds, org.ID)
- }
-
- searcherReposCond := builder.In("owner_id", ownerIds)
- if opts.Collaborate {
- searcherReposCond = searcherReposCond.Or(builder.Expr(`id IN (SELECT repo_id FROM "access" WHERE access.user_id = ? AND owner_id != ?)`,
- opts.Searcher.ID, opts.Searcher.ID))
- }
- cond = cond.And(searcherReposCond)
- }
-
if len(opts.OrderBy) == 0 {
opts.OrderBy = "name ASC"
}
@@ -168,7 +170,7 @@ func SearchRepositoryByName(opts *SearchRepoOptions) (repos RepositoryList, coun
sess := x.NewSession()
defer sess.Close()
- if opts.Starred && opts.OwnerID > 0 {
+ if starJoin {
count, err = sess.
Join("INNER", "star", "star.repo_id = repository.id").
Where(cond).
diff --git a/routers/home.go b/routers/home.go
index 0f7b214627..16d0720551 100644
--- a/routers/home.go
+++ b/routers/home.go
@@ -112,11 +112,12 @@ func RenderRepoSearch(ctx *context.Context, opts *RepoSearchOptions) {
keyword := strings.Trim(ctx.Query("q"), " ")
if len(keyword) == 0 {
repos, count, err = opts.Ranger(&models.SearchRepoOptions{
- Page: page,
- PageSize: opts.PageSize,
- Searcher: ctx.User,
- OrderBy: orderBy,
- Private: opts.Private,
+ Page: page,
+ PageSize: opts.PageSize,
+ Searcher: ctx.User,
+ OrderBy: orderBy,
+ Private: opts.Private,
+ Collaborate: true,
})
if err != nil {
ctx.Handle(500, "opts.Ranger", err)
@@ -125,12 +126,13 @@ func RenderRepoSearch(ctx *context.Context, opts *RepoSearchOptions) {
} else {
if isKeywordValid(keyword) {
repos, count, err = models.SearchRepositoryByName(&models.SearchRepoOptions{
- Keyword: keyword,
- OrderBy: orderBy,
- Private: opts.Private,
- Page: page,
- PageSize: opts.PageSize,
- Searcher: ctx.User,
+ Keyword: keyword,
+ OrderBy: orderBy,
+ Private: opts.Private,
+ Page: page,
+ PageSize: opts.PageSize,
+ Searcher: ctx.User,
+ Collaborate: true,
})
if err != nil {
ctx.Handle(500, "SearchRepositoryByName", err)
diff --git a/routers/user/profile.go b/routers/user/profile.go
index f56ddc4eab..7380501f4b 100644
--- a/routers/user/profile.go
+++ b/routers/user/profile.go
@@ -205,13 +205,14 @@ func Profile(ctx *context.Context) {
ctx.Data["Total"] = total
} else {
repos, count, err = models.SearchRepositoryByName(&models.SearchRepoOptions{
- Keyword: keyword,
- OwnerID: ctxUser.ID,
- OrderBy: orderBy,
- Private: showPrivate,
- Page: page,
- IsProfile: true,
- PageSize: setting.UI.User.RepoPagingNum,
+ Keyword: keyword,
+ OwnerID: ctxUser.ID,
+ OrderBy: orderBy,
+ Private: showPrivate,
+ Page: page,
+ IsProfile: true,
+ PageSize: setting.UI.User.RepoPagingNum,
+ Collaborate: true,
})
if err != nil {
ctx.Handle(500, "SearchRepositoryByName", err)