Mercurial > hg
comparison mercurial/manifest.py @ 24224:d71837d06597
manifest: do parsing inside manifestdict contstructor
This shape to the code will make using a C implementation of the
manifest storage easier.
author | Augie Fackler <augie@google.com> |
---|---|
date | Sat, 07 Mar 2015 11:43:12 -0500 |
parents | b4df0d0c49e7 |
children | 3e5c4af69808 |
comparison
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. |