diff options
author | Ethan Koenig <ethantkoenig@gmail.com> | 2017-10-26 23:10:54 -0700 |
---|---|---|
committer | Lauris BH <lauris@nix.lv> | 2017-10-27 09:10:54 +0300 |
commit | 5866eb23217de4d29b181e30c26cee28ebc6aedc (patch) | |
tree | f8f67462544c709e8dd6988ca4d55a22cfc3a22c /routers | |
parent | 762f1d7237de5727815ebda9593f7f9a20a5a077 (diff) | |
download | gitea-5866eb23217de4d29b181e30c26cee28ebc6aedc.tar.gz gitea-5866eb23217de4d29b181e30c26cee28ebc6aedc.zip |
Code/repo search (#2582)
Indexed search of repository contents (for default branch only)
Diffstat (limited to 'routers')
-rw-r--r-- | routers/init.go | 1 | ||||
-rw-r--r-- | routers/repo/search.go | 46 | ||||
-rw-r--r-- | routers/routes/routes.go | 1 |
3 files changed, 48 insertions, 0 deletions
diff --git a/routers/init.go b/routers/init.go index 8cfbe39ee5..d0d455ea57 100644 --- a/routers/init.go +++ b/routers/init.go @@ -66,6 +66,7 @@ func GlobalInit() { // Booting long running goroutines. cron.NewContext() models.InitIssueIndexer() + models.InitRepoIndexer() models.InitSyncMirrors() models.InitDeliverHooks() models.InitTestPullRequests() diff --git a/routers/repo/search.go b/routers/repo/search.go new file mode 100644 index 0000000000..d755080adb --- /dev/null +++ b/routers/repo/search.go @@ -0,0 +1,46 @@ +// Copyright 2017 The Gitea Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package repo + +import ( + "path" + "strings" + + "code.gitea.io/gitea/modules/base" + "code.gitea.io/gitea/modules/context" + "code.gitea.io/gitea/modules/search" + "code.gitea.io/gitea/modules/setting" + + "github.com/Unknwon/paginater" +) + +const tplSearch base.TplName = "repo/search" + +// Search render repository search page +func Search(ctx *context.Context) { + if !setting.Indexer.RepoIndexerEnabled { + ctx.Redirect(ctx.Repo.RepoLink, 302) + return + } + keyword := strings.TrimSpace(ctx.Query("q")) + page := ctx.QueryInt("page") + if page <= 0 { + page = 1 + } + total, searchResults, err := search.PerformSearch(ctx.Repo.Repository.ID, keyword, page, setting.UI.RepoSearchPagingNum) + if err != nil { + ctx.Handle(500, "SearchResults", err) + return + } + ctx.Data["Keyword"] = keyword + pager := paginater.New(total, setting.UI.RepoSearchPagingNum, page, 5) + ctx.Data["Page"] = pager + ctx.Data["SourcePath"] = setting.AppSubURL + "/" + + path.Join(ctx.Repo.Repository.Owner.Name, ctx.Repo.Repository.Name, "src", ctx.Repo.Repository.DefaultBranch) + ctx.Data["SearchResults"] = searchResults + ctx.Data["RequireHighlightJS"] = true + ctx.Data["PageIsViewCode"] = true + ctx.HTML(200, tplSearch) +} diff --git a/routers/routes/routes.go b/routers/routes/routes.go index 703afbb4a7..94dfe0ab36 100644 --- a/routers/routes/routes.go +++ b/routers/routes/routes.go @@ -649,6 +649,7 @@ func RegisterRoutes(m *macaron.Macaron) { m.Group("/:username/:reponame", func() { m.Get("/stars", repo.Stars) m.Get("/watchers", repo.Watchers) + m.Get("/search", context.CheckUnit(models.UnitTypeCode), repo.Search) }, ignSignIn, context.RepoAssignment(), context.RepoRef(), context.UnitTypes(), context.LoadRepoUnits()) m.Group("/:username", func() { |