keyword: only use expensive fctx.cmp when needed
authorChristian Ebert <blacktrash@gmx.net>
Thu, 14 Oct 2010 22:53:17 +0200
changeset 12732 4bca87c29445
parent 12731 95514b58709d
child 12733 098dfb2b7596
keyword: only use expensive fctx.cmp when needed Restrict expensive cmp to cases when: - comparing against working directory and - encode filters active or - path is configured for keyword expansion
hgext/keyword.py
--- a/hgext/keyword.py	Thu Oct 14 22:47:50 2010 +0200
+++ b/hgext/keyword.py	Thu Oct 14 22:53:17 2010 +0200
@@ -594,9 +594,14 @@
     def kwfilectx_cmp(orig, self, fctx):
         # keyword affects data size, comparing wdir and filelog size does
         # not make sense
-        return self._filelog.cmp(self._filenode, fctx.data())
+        if (fctx._filerev is None and
+            (self._repo._encodefilterpats or
+             kwt.match(fctx.path()) and not 'l' in fctx.flags()) or
+            self.size() == fctx.size()):
+            return self._filelog.cmp(self._filenode, fctx.data())
+        return True
+
     extensions.wrapfunction(context.filectx, 'cmp', kwfilectx_cmp)
-
     extensions.wrapfunction(patch.patchfile, '__init__', kwpatchfile_init)
     extensions.wrapfunction(patch, 'diff', kw_diff)
     extensions.wrapfunction(cmdutil, 'copy', kw_copy)