mercurial/util.py
changeset 39569 cc23c09bc562
parent 39568 842cd0bdda75
child 39570 f296c0b366c8
equal deleted inserted replaced
39568:842cd0bdda75 39569:cc23c09bc562
  1462 
  1462 
  1463     def _enforcecostlimit(self):
  1463     def _enforcecostlimit(self):
  1464         # This should run after an insertion. It should only be called if total
  1464         # This should run after an insertion. It should only be called if total
  1465         # cost limits are being enforced.
  1465         # cost limits are being enforced.
  1466         # The most recently inserted node is never evicted.
  1466         # The most recently inserted node is never evicted.
       
  1467         if len(self) <= 1 or self.totalcost <= self.maxcost:
       
  1468             return
       
  1469 
       
  1470         # This is logically equivalent to calling popoldest() until we
       
  1471         # free up enough cost. We don't do that since popoldest() needs
       
  1472         # to walk the linked list and doing this in a loop would be
       
  1473         # quadratic. So we find the first non-empty node and then
       
  1474         # walk nodes until we free up enough capacity.
       
  1475         n = self._head.prev
       
  1476         while n.key is _notset:
       
  1477             n = n.prev
       
  1478 
  1467         while len(self) > 1 and self.totalcost > self.maxcost:
  1479         while len(self) > 1 and self.totalcost > self.maxcost:
  1468             self.popoldest()
  1480             del self._cache[n.key]
       
  1481             self.totalcost -= n.cost
       
  1482             n.markempty()
       
  1483             n = n.prev
  1469 
  1484 
  1470 def lrucachefunc(func):
  1485 def lrucachefunc(func):
  1471     '''cache most recent results of function calls'''
  1486     '''cache most recent results of function calls'''
  1472     cache = {}
  1487     cache = {}
  1473     order = collections.deque()
  1488     order = collections.deque()