Mercurial > public > mercurial-scm > hg
diff mercurial/util.py @ 39563:b31b01f93b11
util: properly copy lrucachedict instances
Previously, copy() only worked if the cache was full. We teach
copy() to only copy defined nodes.
Differential Revision: https://phab.mercurial-scm.org/D4498
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Thu, 06 Sep 2018 11:33:40 -0700 |
parents | e00123f63410 |
children | 5d75a3c16193 |
line wrap: on
line diff
--- a/mercurial/util.py Thu Sep 06 11:27:25 2018 -0700 +++ b/mercurial/util.py Thu Sep 06 11:33:40 2018 -0700 @@ -1313,11 +1313,19 @@ def copy(self): result = lrucachedict(self._capacity) + + # We copy entries by iterating in oldest-to-newest order so the copy + # has the correct ordering. + + # Find the first non-empty entry. n = self._head.prev - # Iterate in oldest-to-newest order, so the copy has the right ordering + while n.key is _notset and n is not self._head: + n = n.prev + for i in range(len(self._cache)): result[n.key] = n.value n = n.prev + return result def _movetohead(self, node):