Mercurial > public > mercurial-scm > hg
comparison mercurial/revlog.py @ 41084:84491ae0b3f0
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%)
author | Boris Feld <boris.feld@octobus.net> |
---|---|
date | Mon, 17 Dec 2018 10:51:36 +0100 |
parents | cbc3cbd9ff93 |
children | a28833d79aca |
comparison
equal
deleted
inserted
replaced
41083:cbc3cbd9ff93 | 41084:84491ae0b3f0 |
---|---|
1533 def issnapshot(self, rev): | 1533 def issnapshot(self, rev): |
1534 """tells whether rev is a snapshot | 1534 """tells whether rev is a snapshot |
1535 """ | 1535 """ |
1536 if rev == nullrev: | 1536 if rev == nullrev: |
1537 return True | 1537 return True |
1538 deltap = self.deltaparent(rev) | 1538 entry = self.index[rev] |
1539 if deltap == nullrev: | 1539 base = entry[3] |
1540 if base == rev: | |
1540 return True | 1541 return True |
1541 elif not self._sparserevlog: | 1542 elif not self._sparserevlog: |
1542 return False | 1543 return False |
1543 p1, p2 = self.parentrevs(rev) | 1544 if base == nullrev: |
1544 if deltap in (p1, p2): | 1545 return True |
1546 p1 = entry[5] | |
1547 p2 = entry[6] | |
1548 if base == p1 or base == p2: | |
1545 return False | 1549 return False |
1546 return self.issnapshot(deltap) | 1550 return self.issnapshot(base) |
1547 | 1551 |
1548 def snapshotdepth(self, rev): | 1552 def snapshotdepth(self, rev): |
1549 """number of snapshot in the chain before this one""" | 1553 """number of snapshot in the chain before this one""" |
1550 if not self.issnapshot(rev): | 1554 if not self.issnapshot(rev): |
1551 raise error.ProgrammingError('revision %d not a snapshot') | 1555 raise error.ProgrammingError('revision %d not a snapshot') |