summaryrefslogtreecommitdiffstats
path: root/modules/setting
diff options
context:
space:
mode:
authorGiteabot <teabot@gitea.io>2024-05-03 17:59:33 +0800
committerGitHub <noreply@github.com>2024-05-03 17:59:33 +0800
commit1f9a9fab5fbd48a634918f64bb579ae05405ff56 (patch)
treefa1abec8c53c9900ecbb328dbcca36f752d27117 /modules/setting
parent7ad2d039fdf7b936e642cdd1dee70bc2ed687489 (diff)
downloadgitea-1f9a9fab5fbd48a634918f64bb579ae05405ff56.tar.gz
gitea-1f9a9fab5fbd48a634918f64bb579ae05405ff56.zip
Improve grep search (#30843) (#30850)
Backport #30843 by wxiaoguang Reduce the context line number to 1, make "git grep" search respect the include/exclude patter, and fix #30785 Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
Diffstat (limited to 'modules/setting')
-rw-r--r--modules/setting/glob.go32
-rw-r--r--modules/setting/indexer.go12
2 files changed, 37 insertions, 7 deletions
diff --git a/modules/setting/glob.go b/modules/setting/glob.go
new file mode 100644
index 0000000000..8f1d24dea4
--- /dev/null
+++ b/modules/setting/glob.go
@@ -0,0 +1,32 @@
+// Copyright 2024 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package setting
+
+import "github.com/gobwas/glob"
+
+type GlobMatcher struct {
+ compiledGlob glob.Glob
+ patternString string
+}
+
+var _ glob.Glob = (*GlobMatcher)(nil)
+
+func (g *GlobMatcher) Match(s string) bool {
+ return g.compiledGlob.Match(s)
+}
+
+func (g *GlobMatcher) PatternString() string {
+ return g.patternString
+}
+
+func GlobMatcherCompile(pattern string, separators ...rune) (*GlobMatcher, error) {
+ g, err := glob.Compile(pattern, separators...)
+ if err != nil {
+ return nil, err
+ }
+ return &GlobMatcher{
+ compiledGlob: g,
+ patternString: pattern,
+ }, nil
+}
diff --git a/modules/setting/indexer.go b/modules/setting/indexer.go
index 6877d70e3c..18585602c3 100644
--- a/modules/setting/indexer.go
+++ b/modules/setting/indexer.go
@@ -10,8 +10,6 @@ import (
"time"
"code.gitea.io/gitea/modules/log"
-
- "github.com/gobwas/glob"
)
// Indexer settings
@@ -30,8 +28,8 @@ var Indexer = struct {
RepoConnStr string
RepoIndexerName string
MaxIndexerFileSize int64
- IncludePatterns []glob.Glob
- ExcludePatterns []glob.Glob
+ IncludePatterns []*GlobMatcher
+ ExcludePatterns []*GlobMatcher
ExcludeVendored bool
}{
IssueType: "bleve",
@@ -93,12 +91,12 @@ func loadIndexerFrom(rootCfg ConfigProvider) {
}
// IndexerGlobFromString parses a comma separated list of patterns and returns a glob.Glob slice suited for repo indexing
-func IndexerGlobFromString(globstr string) []glob.Glob {
- extarr := make([]glob.Glob, 0, 10)
+func IndexerGlobFromString(globstr string) []*GlobMatcher {
+ extarr := make([]*GlobMatcher, 0, 10)
for _, expr := range strings.Split(strings.ToLower(globstr), ",") {
expr = strings.TrimSpace(expr)
if expr != "" {
- if g, err := glob.Compile(expr, '.', '/'); err != nil {
+ if g, err := GlobMatcherCompile(expr, '.', '/'); err != nil {
log.Info("Invalid glob expression '%s' (skipped): %v", expr, err)
} else {
extarr = append(extarr, g)