您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

indexer.go 3.7KB

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