mercurial/manifest.py
changeset 3189 f3b939444c72
parent 3148 adb246ce6736
child 3215 53e843840349
equal deleted inserted replaced
3188:705e30c0a230 3189:f3b939444c72
     7 
     7 
     8 from revlog import *
     8 from revlog import *
     9 from i18n import gettext as _
     9 from i18n import gettext as _
    10 from demandload import *
    10 from demandload import *
    11 demandload(globals(), "array bisect struct")
    11 demandload(globals(), "array bisect struct")
       
    12 demandload(globals(), "mdiff")
    12 
    13 
    13 class manifestdict(dict):
    14 class manifestdict(dict):
    14     def __init__(self, mapping=None, flags=None):
    15     def __init__(self, mapping=None, flags=None):
    15         if mapping is None: mapping = {}
    16         if mapping is None: mapping = {}
    16         if flags is None: flags = {}
    17         if flags is None: flags = {}
    40         self.mapcache = None
    41         self.mapcache = None
    41         self.listcache = None
    42         self.listcache = None
    42         revlog.__init__(self, opener, "00manifest.i", "00manifest.d",
    43         revlog.__init__(self, opener, "00manifest.i", "00manifest.d",
    43                         defversion)
    44                         defversion)
    44 
    45 
       
    46     def parselines(self, lines):
       
    47         for l in lines.splitlines(1):
       
    48             yield l.split('\0')
       
    49 
       
    50     def readdelta(self, node):
       
    51         delta = mdiff.patchtext(self.delta(node))
       
    52         deltamap = manifestdict()
       
    53         for f, n in self.parselines(delta):
       
    54             deltamap.rawset(f, n)
       
    55         return deltamap
       
    56             
    45     def read(self, node):
    57     def read(self, node):
    46         if node == nullid: return manifestdict() # don't upset local cache
    58         if node == nullid: return manifestdict() # don't upset local cache
    47         if self.mapcache and self.mapcache[0] == node:
    59         if self.mapcache and self.mapcache[0] == node:
    48             return self.mapcache[1]
    60             return self.mapcache[1]
    49         text = self.revision(node)
    61         text = self.revision(node)
    50         self.listcache = array.array('c', text)
    62         self.listcache = array.array('c', text)
    51         lines = text.splitlines(1)
       
    52         mapping = manifestdict()
    63         mapping = manifestdict()
    53         for l in lines:
    64         for f, n in self.parselines(text):
    54             (f, n) = l.split('\0')
       
    55             mapping.rawset(f, n)
    65             mapping.rawset(f, n)
    56         self.mapcache = (node, mapping)
    66         self.mapcache = (node, mapping)
    57         return mapping
    67         return mapping
    58 
    68 
    59     def _search(self, m, s, lo=0, hi=None):
    69     def _search(self, m, s, lo=0, hi=None):