code.gitea.io/gitea@v1.19.3/modules/setting/indexer.go (about)

     1  // Copyright 2019 The Gitea Authors. All rights reserved.
     2  // SPDX-License-Identifier: MIT
     3  
     4  package setting
     5  
     6  import (
     7  	"path/filepath"
     8  	"strings"
     9  	"time"
    10  
    11  	"code.gitea.io/gitea/modules/log"
    12  
    13  	"github.com/gobwas/glob"
    14  )
    15  
    16  // Indexer settings
    17  var Indexer = struct {
    18  	IssueType        string
    19  	IssuePath        string
    20  	IssueConnStr     string
    21  	IssueIndexerName string
    22  	StartupTimeout   time.Duration
    23  
    24  	RepoIndexerEnabled bool
    25  	RepoType           string
    26  	RepoPath           string
    27  	RepoConnStr        string
    28  	RepoIndexerName    string
    29  	MaxIndexerFileSize int64
    30  	IncludePatterns    []glob.Glob
    31  	ExcludePatterns    []glob.Glob
    32  	ExcludeVendored    bool
    33  }{
    34  	IssueType:        "bleve",
    35  	IssuePath:        "indexers/issues.bleve",
    36  	IssueConnStr:     "",
    37  	IssueIndexerName: "gitea_issues",
    38  
    39  	RepoIndexerEnabled: false,
    40  	RepoType:           "bleve",
    41  	RepoPath:           "indexers/repos.bleve",
    42  	RepoConnStr:        "",
    43  	RepoIndexerName:    "gitea_codes",
    44  	MaxIndexerFileSize: 1024 * 1024,
    45  	ExcludeVendored:    true,
    46  }
    47  
    48  func loadIndexerFrom(rootCfg ConfigProvider) {
    49  	sec := rootCfg.Section("indexer")
    50  	Indexer.IssueType = sec.Key("ISSUE_INDEXER_TYPE").MustString("bleve")
    51  	Indexer.IssuePath = filepath.ToSlash(sec.Key("ISSUE_INDEXER_PATH").MustString(filepath.ToSlash(filepath.Join(AppDataPath, "indexers/issues.bleve"))))
    52  	if !filepath.IsAbs(Indexer.IssuePath) {
    53  		Indexer.IssuePath = filepath.ToSlash(filepath.Join(AppWorkPath, Indexer.IssuePath))
    54  	}
    55  	Indexer.IssueConnStr = sec.Key("ISSUE_INDEXER_CONN_STR").MustString(Indexer.IssueConnStr)
    56  	Indexer.IssueIndexerName = sec.Key("ISSUE_INDEXER_NAME").MustString(Indexer.IssueIndexerName)
    57  
    58  	// The following settings are deprecated and can be overridden by settings in [queue] or [queue.issue_indexer]
    59  	// DEPRECATED should not be removed because users maybe upgrade from lower version to the latest version
    60  	// if these are removed, the warning will not be shown
    61  	deprecatedSetting(rootCfg, "indexer", "ISSUE_INDEXER_QUEUE_TYPE", "queue.issue_indexer", "TYPE", "v1.19.0")
    62  	deprecatedSetting(rootCfg, "indexer", "ISSUE_INDEXER_QUEUE_DIR", "queue.issue_indexer", "DATADIR", "v1.19.0")
    63  	deprecatedSetting(rootCfg, "indexer", "ISSUE_INDEXER_QUEUE_CONN_STR", "queue.issue_indexer", "CONN_STR", "v1.19.0")
    64  	deprecatedSetting(rootCfg, "indexer", "ISSUE_INDEXER_QUEUE_BATCH_NUMBER", "queue.issue_indexer", "BATCH_LENGTH", "v1.19.0")
    65  	deprecatedSetting(rootCfg, "indexer", "UPDATE_BUFFER_LEN", "queue.issue_indexer", "LENGTH", "v1.19.0")
    66  
    67  	Indexer.RepoIndexerEnabled = sec.Key("REPO_INDEXER_ENABLED").MustBool(false)
    68  	Indexer.RepoType = sec.Key("REPO_INDEXER_TYPE").MustString("bleve")
    69  	Indexer.RepoPath = filepath.ToSlash(sec.Key("REPO_INDEXER_PATH").MustString(filepath.ToSlash(filepath.Join(AppDataPath, "indexers/repos.bleve"))))
    70  	if !filepath.IsAbs(Indexer.RepoPath) {
    71  		Indexer.RepoPath = filepath.ToSlash(filepath.Join(AppWorkPath, Indexer.RepoPath))
    72  	}
    73  	Indexer.RepoConnStr = sec.Key("REPO_INDEXER_CONN_STR").MustString("")
    74  	Indexer.RepoIndexerName = sec.Key("REPO_INDEXER_NAME").MustString("gitea_codes")
    75  
    76  	Indexer.IncludePatterns = IndexerGlobFromString(sec.Key("REPO_INDEXER_INCLUDE").MustString(""))
    77  	Indexer.ExcludePatterns = IndexerGlobFromString(sec.Key("REPO_INDEXER_EXCLUDE").MustString(""))
    78  	Indexer.ExcludeVendored = sec.Key("REPO_INDEXER_EXCLUDE_VENDORED").MustBool(true)
    79  	Indexer.MaxIndexerFileSize = sec.Key("MAX_FILE_SIZE").MustInt64(1024 * 1024)
    80  	Indexer.StartupTimeout = sec.Key("STARTUP_TIMEOUT").MustDuration(30 * time.Second)
    81  }
    82  
    83  // IndexerGlobFromString parses a comma separated list of patterns and returns a glob.Glob slice suited for repo indexing
    84  func IndexerGlobFromString(globstr string) []glob.Glob {
    85  	extarr := make([]glob.Glob, 0, 10)
    86  	for _, expr := range strings.Split(strings.ToLower(globstr), ",") {
    87  		expr = strings.TrimSpace(expr)
    88  		if expr != "" {
    89  			if g, err := glob.Compile(expr, '.', '/'); err != nil {
    90  				log.Info("Invalid glob expression '%s' (skipped): %v", expr, err)
    91  			} else {
    92  				extarr = append(extarr, g)
    93  			}
    94  		}
    95  	}
    96  	return extarr
    97  }