mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 21:28:11 +09:00 
			
		
		
		
	refactor: small optimize for sql query (#940)
* refactor: small optimize for sql query * fix: get owner name if Searcher is not nil or user star page.
This commit is contained in:
		| @@ -1184,25 +1184,23 @@ func CountUserRepositories(userID int64, private bool) int64 { | |||||||
| } | } | ||||||
|  |  | ||||||
| // Repositories returns all repositories | // Repositories returns all repositories | ||||||
| func Repositories(opts *SearchRepoOptions) (_ []*Repository, err error) { | func Repositories(opts *SearchRepoOptions) (_ RepositoryList, err error) { | ||||||
| 	if len(opts.OrderBy) == 0 { | 	if len(opts.OrderBy) == 0 { | ||||||
| 		opts.OrderBy = "id ASC" | 		opts.OrderBy = "id ASC" | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	repos := make([]*Repository, 0, opts.PageSize) | 	repos := make(RepositoryList, 0, opts.PageSize) | ||||||
| 	return repos, x.Limit(opts.PageSize, (opts.Page-1)*opts.PageSize).OrderBy(opts.OrderBy).Find(&repos) |  | ||||||
|  | 	if err = x. | ||||||
|  | 		Limit(opts.PageSize, (opts.Page-1)*opts.PageSize). | ||||||
|  | 		OrderBy(opts.OrderBy). | ||||||
|  | 		Find(&repos); err != nil { | ||||||
|  | 		return nil, fmt.Errorf("Repo: %v", err) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| // RepositoriesWithUsers returns number of repos in given page. | 	if opts.Searcher != nil || opts.Starred { | ||||||
| func RepositoriesWithUsers(opts *SearchRepoOptions) (_ []*Repository, err error) { | 		if err = repos.loadAttributes(x); err != nil { | ||||||
| 	repos, err := Repositories(opts) | 			return nil, fmt.Errorf("LoadAttributes: %v", err) | ||||||
| 	if err != nil { |  | ||||||
| 		return nil, fmt.Errorf("Repositories: %v", err) |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	for i := range repos { |  | ||||||
| 		if err = repos[i].GetOwner(); err != nil { |  | ||||||
| 			return nil, err |  | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| @@ -1716,7 +1714,7 @@ func GetUserMirrorRepositories(userID int64) ([]*Repository, error) { | |||||||
| } | } | ||||||
|  |  | ||||||
| // GetRecentUpdatedRepositories returns the list of repositories that are recently updated. | // GetRecentUpdatedRepositories returns the list of repositories that are recently updated. | ||||||
| func GetRecentUpdatedRepositories(opts *SearchRepoOptions) (repos []*Repository, err error) { | func GetRecentUpdatedRepositories(opts *SearchRepoOptions) (repos RepositoryList, err error) { | ||||||
| 	if len(opts.OrderBy) == 0 { | 	if len(opts.OrderBy) == 0 { | ||||||
| 		opts.OrderBy = "updated_unix DESC" | 		opts.OrderBy = "updated_unix DESC" | ||||||
| 	} | 	} | ||||||
| @@ -1739,9 +1737,19 @@ func GetRecentUpdatedRepositories(opts *SearchRepoOptions) (repos []*Repository, | |||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	return repos, sess. | 	if err = sess. | ||||||
| 		OrderBy(opts.OrderBy). | 		OrderBy(opts.OrderBy). | ||||||
| 		Find(&repos) | 		Find(&repos); err != nil { | ||||||
|  | 		return nil, fmt.Errorf("Repo: %v", err) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	if opts.Searcher != nil || opts.Starred { | ||||||
|  | 		if err = repos.loadAttributes(x); err != nil { | ||||||
|  | 			return nil, fmt.Errorf("LoadAttributes: %v", err) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	return repos, nil | ||||||
| } | } | ||||||
|  |  | ||||||
| func getRepositoryCount(e Engine, u *User) (int64, error) { | func getRepositoryCount(e Engine, u *User) (int64, error) { | ||||||
| @@ -1848,7 +1856,7 @@ func SearchRepositoryByName(opts *SearchRepoOptions) (repos RepositoryList, _ in | |||||||
| 		return nil, 0, fmt.Errorf("Repo: %v", err) | 		return nil, 0, fmt.Errorf("Repo: %v", err) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	if opts.Starred { | 	if opts.Searcher != nil || opts.Starred { | ||||||
| 		if err = repos.loadAttributes(x); err != nil { | 		if err = repos.loadAttributes(x); err != nil { | ||||||
| 			return nil, 0, fmt.Errorf("LoadAttributes: %v", err) | 			return nil, 0, fmt.Errorf("LoadAttributes: %v", err) | ||||||
| 		} | 		} | ||||||
|   | |||||||
| @@ -71,7 +71,7 @@ func (repo *Repository) GetStargazers(page int) ([]*User, error) { | |||||||
| } | } | ||||||
|  |  | ||||||
| // GetStarredRepos returns the repos the user starred. | // GetStarredRepos returns the repos the user starred. | ||||||
| func (u *User) GetStarredRepos(private bool, page, pageSize int, orderBy string) (repos []*Repository, err error) { | func (u *User) GetStarredRepos(private bool, page, pageSize int, orderBy string) (repos RepositoryList, err error) { | ||||||
| 	if len(orderBy) == 0 { | 	if len(orderBy) == 0 { | ||||||
| 		orderBy = "updated_unix DESC" | 		orderBy = "updated_unix DESC" | ||||||
| 	} | 	} | ||||||
| @@ -95,11 +95,9 @@ func (u *User) GetStarredRepos(private bool, page, pageSize int, orderBy string) | |||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	for _, repo := range repos { | 	if err = repos.loadAttributes(x); err != nil { | ||||||
| 		if err = repo.GetOwner(); err != nil { |  | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	return | 	return | ||||||
| } | } | ||||||
|   | |||||||
| @@ -6,16 +6,15 @@ package routers | |||||||
|  |  | ||||||
| import ( | import ( | ||||||
| 	"bytes" | 	"bytes" | ||||||
| 	"fmt" |  | ||||||
| 	"strings" | 	"strings" | ||||||
|  |  | ||||||
| 	"github.com/Unknwon/paginater" |  | ||||||
|  |  | ||||||
| 	"code.gitea.io/gitea/models" | 	"code.gitea.io/gitea/models" | ||||||
| 	"code.gitea.io/gitea/modules/base" | 	"code.gitea.io/gitea/modules/base" | ||||||
| 	"code.gitea.io/gitea/modules/context" | 	"code.gitea.io/gitea/modules/context" | ||||||
| 	"code.gitea.io/gitea/modules/setting" | 	"code.gitea.io/gitea/modules/setting" | ||||||
| 	"code.gitea.io/gitea/routers/user" | 	"code.gitea.io/gitea/routers/user" | ||||||
|  |  | ||||||
|  | 	"github.com/Unknwon/paginater" | ||||||
| ) | ) | ||||||
|  |  | ||||||
| const ( | const ( | ||||||
| @@ -55,7 +54,7 @@ func Home(ctx *context.Context) { | |||||||
| // RepoSearchOptions when calling search repositories | // RepoSearchOptions when calling search repositories | ||||||
| type RepoSearchOptions struct { | type RepoSearchOptions struct { | ||||||
| 	Counter  func(bool) int64 | 	Counter  func(bool) int64 | ||||||
| 	Ranger   func(*models.SearchRepoOptions) ([]*models.Repository, error) | 	Ranger   func(*models.SearchRepoOptions) (models.RepositoryList, error) | ||||||
| 	Searcher *models.User | 	Searcher *models.User | ||||||
| 	Private  bool | 	Private  bool | ||||||
| 	PageSize int | 	PageSize int | ||||||
| @@ -132,13 +131,6 @@ func RenderRepoSearch(ctx *context.Context, opts *RepoSearchOptions) { | |||||||
| 	ctx.Data["Keyword"] = keyword | 	ctx.Data["Keyword"] = keyword | ||||||
| 	ctx.Data["Total"] = count | 	ctx.Data["Total"] = count | ||||||
| 	ctx.Data["Page"] = paginater.New(int(count), opts.PageSize, page, 5) | 	ctx.Data["Page"] = paginater.New(int(count), opts.PageSize, page, 5) | ||||||
|  |  | ||||||
| 	for _, repo := range repos { |  | ||||||
| 		if err = repo.GetOwner(); err != nil { |  | ||||||
| 			ctx.Handle(500, "GetOwner", fmt.Errorf("%d: %v", repo.ID, err)) |  | ||||||
| 			return |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	ctx.Data["Repos"] = repos | 	ctx.Data["Repos"] = repos | ||||||
|  |  | ||||||
| 	ctx.HTML(200, opts.TplName) | 	ctx.HTML(200, opts.TplName) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user