fbe8d65f0b
- 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 commit aa72a5f009
)
Conflicts:
go.sum
https://codeberg.org/forgejo/forgejo/pulls/2148
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
|
|
}
|