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. |