[PATCH] changelog: inline revlog.__contains__ in case it is used in hot loop

Yuya Nishihara yuya at tcha.org
Wed Apr 8 13:09:58 UTC 2015


# HG changeset patch
# User Yuya Nishihara <yuya at tcha.org>
# Date 1428154259 -32400
#      Sat Apr 04 22:30:59 2015 +0900
# Node ID 8931fb2127b03c349947c25997841dd6cd8e519a
# Parent  b9a2b5018024213aeacd235426740152991066e1
changelog: inline revlog.__contains__ in case it is used in hot loop

Currently __contains__ is called only by "rev()" revset, but "x in cl" is a
function that is likely to be used in hot loop. revlog.__contains__ is simple
enough to duplicate to changelog, so just inline it.

diff --git a/mercurial/changelog.py b/mercurial/changelog.py
--- a/mercurial/changelog.py
+++ b/mercurial/changelog.py
@@ -145,7 +145,7 @@ class changelog(revlog.revlog):
 
     def __contains__(self, rev):
         """filtered version of revlog.__contains__"""
-        return (revlog.revlog.__contains__(self, rev)
+        return (0 <= rev < len(self)
                 and rev not in self.filteredrevs)
 
     def __iter__(self):


More information about the Mercurial-devel mailing list