# HG changeset patch # User Boris Feld # Date 1545040296 -3600 # Node ID 84491ae0b3f0a82cd3a82c43c324400f4bcb2415 # Parent cbc3cbd9ff935526353a19ffbc42625b3904a3fd revlog: more efficient implementation for issnapshot We avoid multiple method calls and tuple creation, this provides a significant speedup in some case: example affected manifest write before: 0.815520s after: 0.487767s (-40%) diff -r cbc3cbd9ff93 -r 84491ae0b3f0 mercurial/revlog.py --- a/mercurial/revlog.py Sun Dec 30 16:14:42 2018 +0100 +++ b/mercurial/revlog.py Mon Dec 17 10:51:36 2018 +0100 @@ -1535,15 +1535,19 @@ """ if rev == nullrev: return True - deltap = self.deltaparent(rev) - if deltap == nullrev: + entry = self.index[rev] + base = entry[3] + if base == rev: return True elif not self._sparserevlog: return False - p1, p2 = self.parentrevs(rev) - if deltap in (p1, p2): + if base == nullrev: + return True + p1 = entry[5] + p2 = entry[6] + if base == p1 or base == p2: return False - return self.issnapshot(deltap) + return self.issnapshot(base) def snapshotdepth(self, rev): """number of snapshot in the chain before this one"""