diff mercurial/grep.py @ 45699:888e633f0c1c

grep: move readfile() to grepsearcher class
author Yuya Nishihara <yuya@tcha.org>
date Wed, 09 Sep 2020 16:04:39 +0900
parents 41e0cbccb260
children c694b1841a5e
line wrap: on
line diff
--- a/mercurial/grep.py	Wed Sep 09 16:00:03 2020 +0900
+++ b/mercurial/grep.py	Wed Sep 09 16:04:39 2020 +0900
@@ -8,8 +8,12 @@
 from __future__ import absolute_import
 
 import difflib
+import errno
+
+from .i18n import _
 
 from . import (
+    error,
     pycompat,
     scmutil,
     util,
@@ -100,3 +104,26 @@
         for lnum, cstart, cend, line in matchlines(body, self._regexp):
             s = linestate(line, lnum, cstart, cend)
             m.append(s)
+
+    def _readfile(self, ctx, fn):
+        rev = ctx.rev()
+        if rev is None:
+            fctx = ctx[fn]
+            try:
+                return fctx.data()
+            except IOError as e:
+                if e.errno != errno.ENOENT:
+                    raise
+        else:
+            flog = self._getfile(fn)
+            fnode = ctx.filenode(fn)
+            try:
+                return flog.read(fnode)
+            except error.CensoredNodeError:
+                self._ui.warn(
+                    _(
+                        b'cannot search in censored file: '
+                        b'%(filename)s:%(revnum)s\n'
+                    )
+                    % {b'filename': fn, b'revnum': pycompat.bytestr(rev)}
+                )