8735fcdb7d
- The [rupture](https://github.com/ethantkoenig/rupture) dependency was essentially outdated in the sense it was using old version of dependencies. - The usage by Forgejo was rather a small portion, so that portion is now vendored (with its tests). - Removes old dependencies from go.sum (less dependencies is better for reviewing what the heck we're importing). Just to note that they were likely not being used by Go's build process (according to https://go.dev/ref/mod#minimal-version-selection), so it's really a matter of formal cleaning up dependencies we don't use and therefor don't want to download and be in our go.sum. (cherry picked from commitaa72a5f009
) Conflicts: go.sum https://codeberg.org/forgejo/forgejo/pulls/2148 (cherry picked from commitfbe8d65f0b
) (cherry picked from commite18debcb6a
) Conflicts: go.sum https://codeberg.org/forgejo/forgejo/pulls/2245 (cherry picked from commit8c43c2ada8
)
102 lines
2.1 KiB
Go
102 lines
2.1 KiB
Go
// Copyright 2023 The Gitea Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package bleve
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"code.gitea.io/gitea/modules/indexer/internal"
|
|
"code.gitea.io/gitea/modules/log"
|
|
|
|
"github.com/blevesearch/bleve/v2"
|
|
"github.com/blevesearch/bleve/v2/mapping"
|
|
)
|
|
|
|
var _ internal.Indexer = &Indexer{}
|
|
|
|
// Indexer represents a basic bleve indexer implementation
|
|
type Indexer struct {
|
|
Indexer bleve.Index
|
|
|
|
indexDir string
|
|
version int
|
|
mappingGetter MappingGetter
|
|
}
|
|
|
|
type MappingGetter func() (mapping.IndexMapping, error)
|
|
|
|
func NewIndexer(indexDir string, version int, mappingGetter func() (mapping.IndexMapping, error)) *Indexer {
|
|
return &Indexer{
|
|
indexDir: indexDir,
|
|
version: version,
|
|
mappingGetter: mappingGetter,
|
|
}
|
|
}
|
|
|
|
// Init initializes the indexer
|
|
func (i *Indexer) Init(_ context.Context) (bool, error) {
|
|
if i == nil {
|
|
return false, fmt.Errorf("cannot init nil indexer")
|
|
}
|
|
|
|
if i.Indexer != nil {
|
|
return false, fmt.Errorf("indexer is already initialized")
|
|
}
|
|
|
|
indexer, version, err := openIndexer(i.indexDir, i.version)
|
|
if err != nil {
|
|
return false, err
|
|
}
|
|
if indexer != nil {
|
|
i.Indexer = indexer
|
|
return true, nil
|
|
}
|
|
|
|
if version != 0 {
|
|
log.Warn("Found older bleve index with version %d, Gitea will remove it and rebuild", version)
|
|
}
|
|
|
|
indexMapping, err := i.mappingGetter()
|
|
if err != nil {
|
|
return false, err
|
|
}
|
|
|
|
indexer, err = bleve.New(i.indexDir, indexMapping)
|
|
if err != nil {
|
|
return false, err
|
|
}
|
|
|
|
if err = writeIndexMetadata(i.indexDir, &IndexMetadata{
|
|
Version: i.version,
|
|
}); err != nil {
|
|
return false, err
|
|
}
|
|
|
|
i.Indexer = indexer
|
|
|
|
return false, nil
|
|
}
|
|
|
|
// Ping checks if the indexer is available
|
|
func (i *Indexer) Ping(_ context.Context) error {
|
|
if i == nil {
|
|
return fmt.Errorf("cannot ping nil indexer")
|
|
}
|
|
if i.Indexer == nil {
|
|
return fmt.Errorf("indexer is not initialized")
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (i *Indexer) Close() {
|
|
if i == nil {
|
|
return
|
|
}
|
|
|
|
if err := i.Indexer.Close(); err != nil {
|
|
log.Error("Failed to close bleve indexer in %q: %v", i.indexDir, err)
|
|
}
|
|
i.Indexer = nil
|
|
}
|