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):