grep: extract public function to register file to be skipped
The main grep loop will be extracted to a searcher method, but this skipping
condition depends on the result of display() function.
--- a/mercurial/commands.py Tue Oct 13 16:44:57 2020 -0400
+++ b/mercurial/commands.py Wed Sep 09 17:04:44 2020 +0900
@@ -3549,9 +3549,7 @@
r = display(fm, fn, ctx, pstates, states)
found = found or r
if r and not diff and not all_files:
- skip.add(fn)
- if copy:
- skip.add(copy)
+ searcher.skipfile(fn, rev)
del revfiles[rev]
# We will keep the matches dict for the duration of the window
# clear the matches dict once the window is over
--- a/mercurial/grep.py Tue Oct 13 16:44:57 2020 -0400
+++ b/mercurial/grep.py Wed Sep 09 17:04:44 2020 +0900
@@ -107,6 +107,14 @@
self._skip = set()
self._revfiles = {}
+ def skipfile(self, fn, rev):
+ """Exclude the given file (and the copy at the specified revision)
+ from future search"""
+ copy = self._copies.get(rev, {}).get(fn)
+ self._skip.add(fn)
+ if copy:
+ self._skip.add(copy)
+
def _grepbody(self, fn, rev, body):
self._matches[rev].setdefault(fn, [])
m = self._matches[rev][fn]