This instance will be upgraded to Heptapod 0.26.0rc1 on 2021-10-25 at 14:00 UTC+2 (a few minutes of down time)

Commit e7aabeed authored by Yuya Nishihara's avatar Yuya Nishihara
Browse files

grep: add stub class that maintains cache and states of grep operation

Prepares for extracting stateful functions from commands.grep().
parent de6f2afc0247
......@@ -3398,9 +3398,11 @@ def grep(ui, repo, pattern, *pats, **opts):
if opts.get(b'print0'):
sep = eol = b'\0'
getfile = util.lrucachefunc(repo.file)
matches = {}
copies = {}
searcher = grepmod.grepsearcher(ui, repo, regexp)
getfile = searcher._getfile
matches = searcher._matches
copies = searcher._copies
def grepbody(fn, rev, body):
matches[rev].setdefault(fn, [])
......@@ -3520,12 +3522,12 @@ def grep(ui, repo, pattern, *pats, **opts):
fm.data(matched=False)
fm.end()
skip = set()
revfiles = {}
skip = searcher._skip
revfiles = searcher._revfiles
found = False
follow = opts.get(b'follow')
getrenamed = scmutil.getrenamedfn(repo)
getrenamed = searcher._getrenamed
def readfile(ctx, fn):
rev = ctx.rev()
......
......@@ -9,7 +9,11 @@ from __future__ import absolute_import
import difflib
from . import pycompat
from . import (
pycompat,
scmutil,
util,
)
def matchlines(body, regexp):
......@@ -69,3 +73,20 @@ def difflinestates(a, b):
yield (b'-', a[i])
for i in pycompat.xrange(blo, bhi):
yield (b'+', b[i])
class grepsearcher(object):
"""Search files and revisions for lines matching the given pattern"""
def __init__(self, ui, repo, regexp):
self._ui = ui
self._repo = repo
self._regexp = regexp
self._getfile = util.lrucachefunc(repo.file)
self._getrenamed = scmutil.getrenamedfn(repo)
self._matches = {}
self._copies = {}
self._skip = set()
self._revfiles = {}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment