Mercurial > public > mercurial-scm > hg
comparison mercurial/localrepo.py @ 43765:e89e3275f658
localrepo: introduce a `_quick_access_changeid` property
Having faster access to `null` is cute? but limited. We want to speedup access
to more useful revision, like `.`. We start with turning the fast path for
`null` into something more generic.
Differential Revision: https://phab.mercurial-scm.org/D7488
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Sat, 23 Nov 2019 16:52:44 -0800 |
parents | 3fd6ec54704c |
children | 888bd39ed555 |
comparison
equal
deleted
inserted
replaced
43764:f9068413bd0c | 43765:e89e3275f658 |
---|---|
1512 | 1512 |
1513 def setnarrowpats(self, newincludes, newexcludes): | 1513 def setnarrowpats(self, newincludes, newexcludes): |
1514 narrowspec.save(self, newincludes, newexcludes) | 1514 narrowspec.save(self, newincludes, newexcludes) |
1515 self.invalidate(clearfilecache=True) | 1515 self.invalidate(clearfilecache=True) |
1516 | 1516 |
1517 @util.propertycache | |
1518 def _quick_access_changeid(self): | |
1519 """an helper dictionnary for __getitem__ calls | |
1520 | |
1521 This contains a list of symbol we can recognise right away without | |
1522 further processing. | |
1523 """ | |
1524 return { | |
1525 b'null': (nullrev, nullid), | |
1526 nullrev: (nullrev, nullid), | |
1527 nullid: (nullrev, nullid), | |
1528 } | |
1529 | |
1517 def __getitem__(self, changeid): | 1530 def __getitem__(self, changeid): |
1518 # dealing with special cases | 1531 # dealing with special cases |
1519 if changeid is None: | 1532 if changeid is None: |
1520 return context.workingctx(self) | 1533 return context.workingctx(self) |
1521 if isinstance(changeid, context.basectx): | 1534 if isinstance(changeid, context.basectx): |
1529 for i in pycompat.xrange(*changeid.indices(len(self))) | 1542 for i in pycompat.xrange(*changeid.indices(len(self))) |
1530 if i not in self.changelog.filteredrevs | 1543 if i not in self.changelog.filteredrevs |
1531 ] | 1544 ] |
1532 | 1545 |
1533 # dealing with some special values | 1546 # dealing with some special values |
1534 if changeid == b'null' or changeid == nullrev or changeid == nullid: | 1547 quick_access = self._quick_access_changeid.get(changeid) |
1535 return context.changectx(self, nullrev, nullid, maybe_filtered=False) | 1548 if quick_access is not None: |
1549 rev, node = quick_access | |
1550 return context.changectx(self, rev, node, maybe_filtered=False) | |
1536 if changeid == b'tip': | 1551 if changeid == b'tip': |
1537 node = self.changelog.tip() | 1552 node = self.changelog.tip() |
1538 rev = self.changelog.rev(node) | 1553 rev = self.changelog.rev(node) |
1539 return context.changectx(self, rev, node) | 1554 return context.changectx(self, rev, node) |
1540 | 1555 |