mercurial/manifest.py
changeset 24224 d71837d06597
parent 24223 b4df0d0c49e7
child 24225 3e5c4af69808
equal deleted inserted replaced
24223:b4df0d0c49e7 24224:d71837d06597
    18             fdict[f] = n[40:]
    18             fdict[f] = n[40:]
    19             mfdict[f] = bin(n[:40])
    19             mfdict[f] = bin(n[:40])
    20         else:
    20         else:
    21             mfdict[f] = bin(n)
    21             mfdict[f] = bin(n)
    22 
    22 
    23 def _parse(lines):
    23 def _parse(lines, mfdict, flags):
    24     mfdict = manifestdict()
       
    25     try:
    24     try:
    26         parsers.parse_manifest(mfdict, mfdict._flags, lines)
    25         parsers.parse_manifest(mfdict, flags, lines)
    27     except AttributeError:
    26     except AttributeError:
    28         _parsemanifest(mfdict, mfdict._flags, lines)
    27         _parsemanifest(mfdict, flags, lines)
    29     return mfdict
    28     return mfdict
    30 
    29 
    31 class manifestdict(dict):
    30 class manifestdict(dict):
    32     def __init__(self):
    31     def __init__(self, data=''):
    33         self._flags = {}
    32         self._flags = {}
       
    33         _parse(data, self, self._flags)
       
    34 
    34     def __setitem__(self, k, v):
    35     def __setitem__(self, k, v):
    35         assert v is not None
    36         assert v is not None
    36         dict.__setitem__(self, k, v)
    37         dict.__setitem__(self, k, v)
    37     def flags(self, f):
    38     def flags(self, f):
    38         return self._flags.get(f, "")
    39         return self._flags.get(f, "")
   248         self._mancache = util.lrucachedict(cachesize)
   249         self._mancache = util.lrucachedict(cachesize)
   249         revlog.revlog.__init__(self, opener, "00manifest.i")
   250         revlog.revlog.__init__(self, opener, "00manifest.i")
   250 
   251 
   251     def readdelta(self, node):
   252     def readdelta(self, node):
   252         r = self.rev(node)
   253         r = self.rev(node)
   253         return _parse(mdiff.patchtext(self.revdiff(self.deltaparent(r), r)))
   254         d = mdiff.patchtext(self.revdiff(self.deltaparent(r), r))
       
   255         return manifestdict(d)
   254 
   256 
   255     def readfast(self, node):
   257     def readfast(self, node):
   256         '''use the faster of readdelta or read'''
   258         '''use the faster of readdelta or read'''
   257         r = self.rev(node)
   259         r = self.rev(node)
   258         deltaparent = self.deltaparent(r)
   260         deltaparent = self.deltaparent(r)
   265             return manifestdict() # don't upset local cache
   267             return manifestdict() # don't upset local cache
   266         if node in self._mancache:
   268         if node in self._mancache:
   267             return self._mancache[node][0]
   269             return self._mancache[node][0]
   268         text = self.revision(node)
   270         text = self.revision(node)
   269         arraytext = array.array('c', text)
   271         arraytext = array.array('c', text)
   270         m = _parse(text)
   272         m = manifestdict(text)
   271         self._mancache[node] = (m, arraytext)
   273         self._mancache[node] = (m, arraytext)
   272         return m
   274         return m
   273 
   275 
   274     def find(self, node, f):
   276     def find(self, node, f):
   275         '''look up entry for a single file efficiently.
   277         '''look up entry for a single file efficiently.