# HG changeset patch # User Yuya Nishihara # Date 1599638684 -32400 # Node ID c10c87c8fe79a7c1f7e6097928fa4de5e2fec953 # Parent 87c35b5a14eb66bd4b1937bb65f948a3abe41d79 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. diff -r 87c35b5a14eb -r c10c87c8fe79 mercurial/commands.py --- 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 diff -r 87c35b5a14eb -r c10c87c8fe79 mercurial/grep.py --- 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]