diff options
author | Junegunn Choi <junegunn.c@gmail.com> | 2023-05-27 15:43:31 +0900 |
---|---|---|
committer | Junegunn Choi <junegunn.c@gmail.com> | 2023-05-27 15:51:04 +0900 |
commit | 4c70745cc1c8856486dab9e07985cbcf5081e490 (patch) | |
tree | 84a742cb75d32c13142a9354e4aa40858abc0f07 /src/matcher.go | |
parent | 7795748a3f42e86a802cc9ea9569429892f47f95 (diff) |
Fix bug where preview is not updated after reload when --disabled is set
Fix #3311
Diffstat (limited to 'src/matcher.go')
-rw-r--r-- | src/matcher.go | 29 |
1 files changed, 16 insertions, 13 deletions
diff --git a/src/matcher.go b/src/matcher.go index 22aa819c..b9288bb6 100644 --- a/src/matcher.go +++ b/src/matcher.go @@ -12,11 +12,11 @@ import ( // MatchRequest represents a search request type MatchRequest struct { - chunks []*Chunk - pattern *Pattern - final bool - sort bool - clearCache bool + chunks []*Chunk + pattern *Pattern + final bool + sort bool + revision int } // Matcher is responsible for performing search @@ -29,6 +29,7 @@ type Matcher struct { partitions int slab []*util.Slab mergerCache map[string]*Merger + revision int } const ( @@ -38,7 +39,7 @@ const ( // NewMatcher returns a new Matcher func NewMatcher(patternBuilder func([]rune) *Pattern, - sort bool, tac bool, eventBox *util.EventBox) *Matcher { + sort bool, tac bool, eventBox *util.EventBox, revision int) *Matcher { partitions := util.Min(numPartitionsMultiplier*runtime.NumCPU(), maxPartitions) return &Matcher{ patternBuilder: patternBuilder, @@ -48,7 +49,8 @@ func NewMatcher(patternBuilder func([]rune) *Pattern, reqBox: util.NewEventBox(), partitions: partitions, slab: make([]*util.Slab, partitions), - mergerCache: make(map[string]*Merger)} + mergerCache: make(map[string]*Merger), + revision: revision} } // Loop puts Matcher in action @@ -70,8 +72,9 @@ func (m *Matcher) Loop() { events.Clear() }) - if request.sort != m.sort || request.clearCache { + if request.sort != m.sort || request.revision != m.revision { m.sort = request.sort + m.revision = request.revision m.mergerCache = make(map[string]*Merger) clearChunkCache() } @@ -140,11 +143,11 @@ func (m *Matcher) scan(request MatchRequest) (*Merger, bool) { numChunks := len(request.chunks) if numChunks == 0 { - return EmptyMerger, false + return EmptyMerger(request.revision), false } pattern := request.pattern if pattern.IsEmpty() { - return PassMerger(&request.chunks, m.tac), false + return PassMerger(&request.chunks, m.tac, request.revision), false } cancelled := util.NewAtomicBool(false) @@ -218,11 +221,11 @@ func (m *Matcher) scan(request MatchRequest) (*Merger, bool) { partialResult := <-resultChan partialResults[partialResult.index] = partialResult.matches } - return NewMerger(pattern, partialResults, m.sort, m.tac), false + return NewMerger(pattern, partialResults, m.sort, m.tac, request.revision), false } // Reset is called to interrupt/signal the ongoing search -func (m *Matcher) Reset(chunks []*Chunk, patternRunes []rune, cancel bool, final bool, sort bool, clearCache bool) { +func (m *Matcher) Reset(chunks []*Chunk, patternRunes []rune, cancel bool, final bool, sort bool, revision int) { pattern := m.patternBuilder(patternRunes) var event util.EventType @@ -231,5 +234,5 @@ func (m *Matcher) Reset(chunks []*Chunk, patternRunes []rune, cancel bool, final } else { event = reqRetry } - m.reqBox.Set(event, MatchRequest{chunks, pattern, final, sort && pattern.sortable, clearCache}) + m.reqBox.Set(event, MatchRequest{chunks, pattern, final, sort && pattern.sortable, revision}) } |