mercurial/branchmap.py
changeset 42001 624d6683c705
parent 41839 38de3300414f
child 42002 662ffdde5adf
--- a/mercurial/branchmap.py	Sat Mar 23 20:59:07 2019 +0900
+++ b/mercurial/branchmap.py	Mon Mar 18 18:59:38 2019 +0300
@@ -127,7 +127,7 @@
         self._per_filter.clear()
 
 
-class branchcache(dict):
+class branchcache(object):
     """A dict like object that hold branches heads cache.
 
     This cache is used to avoid costly computations to determine all the
@@ -151,7 +151,6 @@
 
     def __init__(self, entries=(), tipnode=nullid, tiprev=nullrev,
                  filteredhash=None, closednodes=None):
-        super(branchcache, self).__init__(entries)
         self.tipnode = tipnode
         self.tiprev = tiprev
         self.filteredhash = filteredhash
@@ -162,6 +161,25 @@
             self._closednodes = set()
         else:
             self._closednodes = closednodes
+        self.entries = dict(entries)
+
+    def __iter__(self):
+        return iter(self.entries)
+
+    def __setitem__(self, key, value):
+        self.entries[key] = value
+
+    def __getitem__(self, key):
+        return self.entries[key]
+
+    def setdefault(self, *args):
+        return self.entries.setdefault(*args)
+
+    def iteritems(self):
+        return self.entries.iteritems()
+
+    def itervalues(self):
+        return self.entries.itervalues()
 
     @classmethod
     def fromfile(cls, repo):
@@ -271,8 +289,8 @@
 
     def copy(self):
         """return an deep copy of the branchcache object"""
-        return type(self)(
-            self, self.tipnode, self.tiprev, self.filteredhash,
+        return branchcache(
+            self.entries, self.tipnode, self.tiprev, self.filteredhash,
             self._closednodes)
 
     def write(self, repo):
@@ -295,7 +313,7 @@
             f.close()
             repo.ui.log('branchcache',
                         'wrote %s branch cache with %d labels and %d nodes\n',
-                        repo.filtername, len(self), nodecount)
+                        repo.filtername, len(self.entries), nodecount)
         except (IOError, OSError, error.Abort) as inst:
             # Abort may be raised by read only opener, so log and continue
             repo.ui.debug("couldn't write branch cache: %s\n" %
@@ -351,7 +369,7 @@
             # cache key are not valid anymore
             self.tipnode = nullid
             self.tiprev = nullrev
-            for heads in self.values():
+            for heads in self.itervalues():
                 tiprev = max(cl.rev(node) for node in heads)
                 if tiprev > self.tiprev:
                     self.tipnode = cl.node(tiprev)