* Remove redudant functions and codetags/v1.21.12.1
| @@ -27,9 +27,11 @@ func InitIssueIndexer() { | |||
| func populateIssueIndexer() error { | |||
| batch := indexer.IssueIndexerBatch() | |||
| for page := 1; ; page++ { | |||
| repos, _, err := Repositories(&SearchRepoOptions{ | |||
| repos, _, err := SearchRepositoryByName(&SearchRepoOptions{ | |||
| Page: page, | |||
| PageSize: 10, | |||
| OrderBy: SearchOrderByID, | |||
| Private: true, | |||
| }) | |||
| if err != nil { | |||
| return fmt.Errorf("Repositories: %v", err) | |||
| @@ -105,6 +105,7 @@ type SearchRepoOptions struct { | |||
| Starred bool `json:"-"` | |||
| Page int `json:"-"` | |||
| IsProfile bool `json:"-"` | |||
| AllPublic bool `json:"-"` // Include also all public repositories | |||
| // Limit of result | |||
| // | |||
| // maximum: setting.ExplorePagingNum | |||
| @@ -129,6 +130,8 @@ const ( | |||
| SearchOrderByNewest = "created_unix DESC" | |||
| SearchOrderBySize = "size ASC" | |||
| SearchOrderBySizeReverse = "size DESC" | |||
| SearchOrderByID = "id ASC" | |||
| SearchOrderByIDReverse = "id DESC" | |||
| ) | |||
| // SearchRepositoryByName takes keyword and part of repository name to search, | |||
| @@ -147,11 +150,6 @@ func SearchRepositoryByName(opts *SearchRepoOptions) (repos RepositoryList, coun | |||
| starJoin = true | |||
| } | |||
| opts.Keyword = strings.ToLower(opts.Keyword) | |||
| if opts.Keyword != "" { | |||
| cond = cond.And(builder.Like{"lower_name", opts.Keyword}) | |||
| } | |||
| // Append conditions | |||
| if !opts.Starred && opts.OwnerID > 0 { | |||
| var searcherReposCond builder.Cond = builder.Eq{"owner_id": opts.OwnerID} | |||
| @@ -182,6 +180,15 @@ func SearchRepositoryByName(opts *SearchRepoOptions) (repos RepositoryList, coun | |||
| cond = cond.And(builder.Eq{"is_private": false}) | |||
| } | |||
| if opts.OwnerID > 0 && opts.AllPublic { | |||
| cond = cond.Or(builder.Eq{"is_private": false}) | |||
| } | |||
| opts.Keyword = strings.ToLower(opts.Keyword) | |||
| if opts.Keyword != "" { | |||
| cond = cond.And(builder.Like{"lower_name", opts.Keyword}) | |||
| } | |||
| if len(opts.OrderBy) == 0 { | |||
| opts.OrderBy = SearchOrderByAlphabetically | |||
| } | |||
| @@ -225,78 +232,3 @@ func SearchRepositoryByName(opts *SearchRepoOptions) (repos RepositoryList, coun | |||
| return | |||
| } | |||
| // Repositories returns all repositories | |||
| func Repositories(opts *SearchRepoOptions) (_ RepositoryList, count int64, err error) { | |||
| if len(opts.OrderBy) == 0 { | |||
| opts.OrderBy = "id ASC" | |||
| } | |||
| repos := make(RepositoryList, 0, opts.PageSize) | |||
| if err = x. | |||
| Limit(opts.PageSize, (opts.Page-1)*opts.PageSize). | |||
| OrderBy(opts.OrderBy.String()). | |||
| Find(&repos); err != nil { | |||
| return nil, 0, fmt.Errorf("Repo: %v", err) | |||
| } | |||
| if err = repos.loadAttributes(x); err != nil { | |||
| return nil, 0, fmt.Errorf("LoadAttributes: %v", err) | |||
| } | |||
| count = countRepositories(-1, opts.Private) | |||
| return repos, count, nil | |||
| } | |||
| // GetRecentUpdatedRepositories returns the list of repositories that are recently updated. | |||
| func GetRecentUpdatedRepositories(opts *SearchRepoOptions) (repos RepositoryList, _ int64, _ error) { | |||
| var cond = builder.NewCond() | |||
| if len(opts.OrderBy) == 0 { | |||
| opts.OrderBy = SearchOrderByRecentUpdated | |||
| } | |||
| if !opts.Private { | |||
| cond = builder.Eq{ | |||
| "is_private": false, | |||
| } | |||
| } | |||
| if opts.Searcher != nil && !opts.Searcher.IsAdmin { | |||
| 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) | |||
| } | |||
| cond = cond.Or(builder.In("owner_id", ownerIds)) | |||
| } | |||
| count, err := x.Where(cond).Count(new(Repository)) | |||
| if err != nil { | |||
| return nil, 0, fmt.Errorf("Count: %v", err) | |||
| } | |||
| if err = x.Where(cond). | |||
| Limit(opts.PageSize, (opts.Page-1)*opts.PageSize). | |||
| Limit(opts.PageSize). | |||
| OrderBy(opts.OrderBy.String()). | |||
| Find(&repos); err != nil { | |||
| return nil, 0, fmt.Errorf("Repo: %v", err) | |||
| } | |||
| if err = repos.loadAttributes(x); err != nil { | |||
| return nil, 0, fmt.Errorf("LoadAttributes: %v", err) | |||
| } | |||
| return repos, count, nil | |||
| } | |||
| @@ -98,6 +98,24 @@ func TestSearchRepositoryByName(t *testing.T) { | |||
| {name: "PublicAndPrivateRepositoriesOfOrganization", | |||
| opts: &SearchRepoOptions{Page: 1, PageSize: 10, OwnerID: 17, Private: true}, | |||
| count: 2}, | |||
| {name: "AllPublic/PublicRepositoriesByName", | |||
| opts: &SearchRepoOptions{Keyword: "big_test_", PageSize: 10, AllPublic: true}, | |||
| count: 4}, | |||
| {name: "AllPublic/PublicAndPrivateRepositoriesByName", | |||
| opts: &SearchRepoOptions{Keyword: "big_test_", Page: 1, PageSize: 10, Private: true, AllPublic: true}, | |||
| count: 8}, | |||
| {name: "AllPublic/PublicRepositoriesOfUserIncludingCollaborative", | |||
| opts: &SearchRepoOptions{Page: 1, PageSize: 10, OwnerID: 15, Collaborate: true, AllPublic: true}, | |||
| count: 12}, | |||
| {name: "AllPublic/PublicAndPrivateRepositoriesOfUserIncludingCollaborative", | |||
| opts: &SearchRepoOptions{Page: 1, PageSize: 10, OwnerID: 15, Private: true, Collaborate: true, AllPublic: true}, | |||
| count: 16}, | |||
| {name: "AllPublic/PublicAndPrivateRepositoriesOfUserIncludingCollaborativeByName", | |||
| opts: &SearchRepoOptions{Keyword: "test", Page: 1, PageSize: 10, OwnerID: 15, Private: true, Collaborate: true, AllPublic: true}, | |||
| count: 10}, | |||
| {name: "AllPublic/PublicRepositoriesOfOrganization", | |||
| opts: &SearchRepoOptions{Page: 1, PageSize: 10, OwnerID: 17, AllPublic: true}, | |||
| count: 12}, | |||
| } | |||
| for _, testCase := range testCases { | |||
| @@ -126,7 +144,7 @@ func TestSearchRepositoryByName(t *testing.T) { | |||
| } | |||
| // FIXME: Can't check, need to fix current behaviour (see previous FIXME comments in test cases) | |||
| /*if testCase.opts.OwnerID > 0 && !testCase.opts.Collaborate { | |||
| /*if testCase.opts.OwnerID > 0 && !testCase.opts.Collaborate && !AllPublic { | |||
| assert.Equal(t, testCase.opts.OwnerID, repo.Owner.ID) | |||
| }*/ | |||
| @@ -24,7 +24,6 @@ func Repos(ctx *context.Context) { | |||
| ctx.Data["PageIsAdminRepositories"] = true | |||
| routers.RenderRepoSearch(ctx, &routers.RepoSearchOptions{ | |||
| Ranger: models.Repositories, | |||
| Private: true, | |||
| PageSize: setting.UI.Admin.RepoPagingNum, | |||
| TplName: tplRepos, | |||
| @@ -60,8 +60,7 @@ func Swagger(ctx *context.Context) { | |||
| // RepoSearchOptions when calling search repositories | |||
| type RepoSearchOptions struct { | |||
| Ranger func(*models.SearchRepoOptions) (models.RepositoryList, int64, error) | |||
| Searcher *models.User | |||
| OwnerID int64 | |||
| Private bool | |||
| PageSize int | |||
| TplName base.TplName | |||
| @@ -113,35 +112,21 @@ 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, | |||
| Collaborate: true, | |||
| }) | |||
| if err != nil { | |||
| ctx.Handle(500, "opts.Ranger", err) | |||
| return | |||
| } | |||
| } 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, | |||
| Collaborate: true, | |||
| }) | |||
| if err != nil { | |||
| ctx.Handle(500, "SearchRepositoryByName", err) | |||
| return | |||
| } | |||
| } | |||
| repos, count, err = models.SearchRepositoryByName(&models.SearchRepoOptions{ | |||
| Page: page, | |||
| PageSize: opts.PageSize, | |||
| OrderBy: orderBy, | |||
| Private: opts.Private, | |||
| Keyword: keyword, | |||
| OwnerID: opts.OwnerID, | |||
| Searcher: ctx.User, | |||
| Collaborate: true, | |||
| AllPublic: true, | |||
| }) | |||
| if err != nil { | |||
| ctx.Handle(500, "SearchRepositoryByName", err) | |||
| return | |||
| } | |||
| ctx.Data["Keyword"] = keyword | |||
| ctx.Data["Total"] = count | |||
| @@ -157,11 +142,15 @@ func ExploreRepos(ctx *context.Context) { | |||
| ctx.Data["PageIsExplore"] = true | |||
| ctx.Data["PageIsExploreRepositories"] = true | |||
| var ownerID int64 | |||
| if ctx.User != nil && !ctx.User.IsAdmin { | |||
| ownerID = ctx.User.ID | |||
| } | |||
| RenderRepoSearch(ctx, &RepoSearchOptions{ | |||
| Ranger: models.GetRecentUpdatedRepositories, | |||
| PageSize: setting.UI.ExplorePagingNum, | |||
| Searcher: ctx.User, | |||
| Private: ctx.User != nil && ctx.User.IsAdmin, | |||
| OwnerID: ownerID, | |||
| Private: ctx.User != nil, | |||
| TplName: tplExploreRepos, | |||
| }) | |||
| } | |||