You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

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. }