@@ -5,11 +5,11 @@ package repo
55
66import (
77 "net/http"
8- "strings"
98
109 "code.gitea.io/gitea/models/db"
1110 "code.gitea.io/gitea/modules/git"
1211 code_indexer "code.gitea.io/gitea/modules/indexer/code"
12+ "code.gitea.io/gitea/modules/indexer/code/gitgrep"
1313 "code.gitea.io/gitea/modules/setting"
1414 "code.gitea.io/gitea/modules/templates"
1515 "code.gitea.io/gitea/routers/common"
@@ -18,16 +18,6 @@ import (
1818
1919const tplSearch templates.TplName = "repo/search"
2020
21- func indexSettingToGitGrepPathspecList () (list []string ) {
22- for _ , expr := range setting .Indexer .IncludePatterns {
23- list = append (list , ":(glob)" + expr .PatternString ())
24- }
25- for _ , expr := range setting .Indexer .ExcludePatterns {
26- list = append (list , ":(glob,exclude)" + expr .PatternString ())
27- }
28- return list
29- }
30-
3121// Search render repository search page
3222func Search (ctx * context.Context ) {
3323 ctx .Data ["PageIsViewCode" ] = true
@@ -67,38 +57,14 @@ func Search(ctx *context.Context) {
6757 ctx .Data ["CodeIndexerUnavailable" ] = ! code_indexer .IsAvailable (ctx )
6858 }
6959 } else {
70- searchRefName := git .RefNameFromBranch (ctx .Repo .Repository .DefaultBranch ) // BranchName should be default branch or the first existing branch
71- res , err := git .GrepSearch (ctx , ctx .Repo .GitRepo , prepareSearch .Keyword , git.GrepOptions {
72- ContextLineNumber : 1 ,
73- IsFuzzy : prepareSearch .IsFuzzy ,
74- RefName : searchRefName .String (),
75- PathspecList : indexSettingToGitGrepPathspecList (),
76- })
77- if err != nil {
78- // TODO: if no branch exists, it reports: exit status 128, fatal: this operation must be run in a work tree.
79- ctx .ServerError ("GrepSearch" , err )
80- return
81- }
82- commitID , err := ctx .Repo .GitRepo .GetRefCommitID (searchRefName .String ())
60+ var err error
61+ // ref should be default branch or the first existing branch
62+ searchRef := git .RefNameFromBranch (ctx .Repo .Repository .DefaultBranch )
63+ searchResults , total , err = gitgrep .PerformSearch (ctx , page , ctx .Repo .Repository .ID , ctx .Repo .GitRepo , searchRef , prepareSearch .Keyword , prepareSearch .IsFuzzy )
8364 if err != nil {
84- ctx .ServerError ("GetRefCommitID " , err )
65+ ctx .ServerError ("gitgrep.PerformSearch " , err )
8566 return
8667 }
87- total = len (res )
88- pageStart := min ((page - 1 )* setting .UI .RepoSearchPagingNum , len (res ))
89- pageEnd := min (page * setting .UI .RepoSearchPagingNum , len (res ))
90- res = res [pageStart :pageEnd ]
91- for _ , r := range res {
92- searchResults = append (searchResults , & code_indexer.Result {
93- RepoID : ctx .Repo .Repository .ID ,
94- Filename : r .Filename ,
95- CommitID : commitID ,
96- // UpdatedUnix: not supported yet
97- // Language: not supported yet
98- // Color: not supported yet
99- Lines : code_indexer .HighlightSearchResultCode (r .Filename , "" , r .LineNumbers , strings .Join (r .LineCodes , "\n " )),
100- })
101- }
10268 }
10369
10470 ctx .Data ["Repo" ] = ctx .Repo .Repository
0 commit comments