@@ -5,11 +5,11 @@ package repo
5
5
6
6
import (
7
7
"net/http"
8
- "strings"
9
8
10
9
"code.gitea.io/gitea/models/db"
11
10
"code.gitea.io/gitea/modules/git"
12
11
code_indexer "code.gitea.io/gitea/modules/indexer/code"
12
+ "code.gitea.io/gitea/modules/indexer/code/gitgrep"
13
13
"code.gitea.io/gitea/modules/setting"
14
14
"code.gitea.io/gitea/modules/templates"
15
15
"code.gitea.io/gitea/routers/common"
@@ -18,16 +18,6 @@ import (
18
18
19
19
const tplSearch templates.TplName = "repo/search"
20
20
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
-
31
21
// Search render repository search page
32
22
func Search (ctx * context.Context ) {
33
23
ctx .Data ["PageIsViewCode" ] = true
@@ -67,38 +57,14 @@ func Search(ctx *context.Context) {
67
57
ctx .Data ["CodeIndexerUnavailable" ] = ! code_indexer .IsAvailable (ctx )
68
58
}
69
59
} 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 )
83
64
if err != nil {
84
- ctx .ServerError ("GetRefCommitID " , err )
65
+ ctx .ServerError ("gitgrep.PerformSearch " , err )
85
66
return
86
67
}
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
- }
102
68
}
103
69
104
70
ctx .Data ["Repo" ] = ctx .Repo .Repository
0 commit comments