summaryrefslogtreecommitdiffstats
path: root/modules/setting/indexer.go
diff options
context:
space:
mode:
authorguillep2k <18600385+guillep2k@users.noreply.github.com>2019-09-11 14:26:28 -0300
committerLauris BH <lauris@nix.lv>2019-09-11 20:26:28 +0300
commit72f6d5c882dc1adfd249e85576aaf6384ee39251 (patch)
tree63c5c5bffb02eba06a10307f1c8f290e9be64386 /modules/setting/indexer.go
parent3fd0eec900126d392ff7a45c510cfe64639c198e (diff)
downloadgitea-72f6d5c882dc1adfd249e85576aaf6384ee39251.tar.gz
gitea-72f6d5c882dc1adfd249e85576aaf6384ee39251.zip
Restrict repository indexing by glob match (#7767)
* Restrict repository indexing by file extension * Use REPO_EXTENSIONS_LIST_INCLUDE instead of REPO_EXTENSIONS_LIST_EXCLUDE and have a more flexible extension pattern * Corrected to pass lint gosimple * Add wildcard support to REPO_INDEXER_EXTENSIONS * This reverts commit 72a650c8e42f4abf59d5df7cd5dc27b451494cc6. * Add wildcard support to REPO_INDEXER_EXTENSIONS (no make vendor) * Simplify isIndexable() for better clarity * Add gobwas/glob to vendors * manually set appengine new release * Implement better REPO_INDEXER_INCLUDE and REPO_INDEXER_EXCLUDE * Add unit and integration tests * Update app.ini.sample and reword config-cheat-sheet * Add doc page and correct app.ini.sample * Some polish on the doc * Simplify code as suggested by @lafriks
Diffstat (limited to 'modules/setting/indexer.go')
-rw-r--r--modules/setting/indexer.go26
1 files changed, 26 insertions, 0 deletions
diff --git a/modules/setting/indexer.go b/modules/setting/indexer.go
index 36fd4a020b..30c670d407 100644
--- a/modules/setting/indexer.go
+++ b/modules/setting/indexer.go
@@ -7,6 +7,11 @@ package setting
import (
"path"
"path/filepath"
+ "strings"
+
+ "code.gitea.io/gitea/modules/log"
+
+ "github.com/gobwas/glob"
)
// enumerates all the indexer queue types
@@ -29,6 +34,8 @@ var (
IssueQueueDir string
IssueQueueConnStr string
IssueQueueBatchNumber int
+ IncludePatterns []glob.Glob
+ ExcludePatterns []glob.Glob
}{
IssueType: "bleve",
IssuePath: "indexers/issues.bleve",
@@ -51,6 +58,9 @@ func newIndexerService() {
if !filepath.IsAbs(Indexer.RepoPath) {
Indexer.RepoPath = path.Join(AppWorkPath, Indexer.RepoPath)
}
+ Indexer.IncludePatterns = IndexerGlobFromString(sec.Key("REPO_INDEXER_INCLUDE").MustString(""))
+ Indexer.ExcludePatterns = IndexerGlobFromString(sec.Key("REPO_INDEXER_EXCLUDE").MustString(""))
+
Indexer.UpdateQueueLength = sec.Key("UPDATE_BUFFER_LEN").MustInt(20)
Indexer.MaxIndexerFileSize = sec.Key("MAX_FILE_SIZE").MustInt64(1024 * 1024)
Indexer.IssueQueueType = sec.Key("ISSUE_INDEXER_QUEUE_TYPE").MustString(LevelQueueType)
@@ -58,3 +68,19 @@ func newIndexerService() {
Indexer.IssueQueueConnStr = sec.Key("ISSUE_INDEXER_QUEUE_CONN_STR").MustString(path.Join(AppDataPath, ""))
Indexer.IssueQueueBatchNumber = sec.Key("ISSUE_INDEXER_QUEUE_BATCH_NUMBER").MustInt(20)
}
+
+// 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)
+ for _, expr := range strings.Split(strings.ToLower(globstr), ",") {
+ expr = strings.TrimSpace(expr)
+ if expr != "" {
+ if g, err := glob.Compile(expr, '.', '/'); err != nil {
+ log.Info("Invalid glob expresion '%s' (skipped): %v", expr, err)
+ } else {
+ extarr = append(extarr, g)
+ }
+ }
+ }
+ return extarr
+}