Mercurial > hg
comparison mercurial/obsolete.py @ 24019:26fbf07482b2
_fm1readmarkers: generate list in C
This moves perfloadmarkers from
! result: 63866
! wall 0.239217 comb 0.250000 user 0.240000 sys 0.010000 (best of 42)
to
! result: 63866
! wall 0.218795 comb 0.210000 user 0.210000 sys 0.000000 (best of 46)
author | Martin von Zweigbergk <martinvonz@google.com> |
---|---|
date | Tue, 27 Jan 2015 09:22:59 -0500 |
parents | 26d6a6a78c1d |
children | e0e6dd806b23 |
comparison
equal
deleted
inserted
replaced
24018:26d6a6a78c1d | 24019:26fbf07482b2 |
---|---|
283 _fm1parentshift = 14 | 283 _fm1parentshift = 14 |
284 _fm1parentmask = (_fm1parentnone << _fm1parentshift) | 284 _fm1parentmask = (_fm1parentnone << _fm1parentshift) |
285 _fm1metapair = 'BB' | 285 _fm1metapair = 'BB' |
286 _fm1metapairsize = _calcsize('BB') | 286 _fm1metapairsize = _calcsize('BB') |
287 | 287 |
288 def _fm1readmarkers(data, off): | 288 def _fm1purereadmarkers(data, off): |
289 # make some global constants local for performance | 289 # make some global constants local for performance |
290 noneflag = _fm1parentnone | 290 noneflag = _fm1parentnone |
291 sha2flag = usingsha256 | 291 sha2flag = usingsha256 |
292 sha1size = _fm1nodesha1size | 292 sha1size = _fm1nodesha1size |
293 sha2size = _fm1nodesha256size | 293 sha2size = _fm1nodesha256size |
299 unpack = _unpack | 299 unpack = _unpack |
300 | 300 |
301 # Loop on markers | 301 # Loop on markers |
302 stop = len(data) - _fm1fsize | 302 stop = len(data) - _fm1fsize |
303 ufixed = util.unpacker(_fm1fixed) | 303 ufixed = util.unpacker(_fm1fixed) |
304 | |
305 fast = getattr(parsers, 'fm1readmarker', None) | |
306 if fast is not None: | |
307 while off <= stop: | |
308 ret = fast(data, off) | |
309 yield ret[1:] | |
310 off += ret[0] | |
311 return | |
312 | 304 |
313 while off <= stop: | 305 while off <= stop: |
314 # read fixed part | 306 # read fixed part |
315 o1 = off + fsize | 307 o1 = off + fsize |
316 t, secs, tz, flags, numsuc, numpar, nummeta, prec = ufixed(data[off:o1]) | 308 t, secs, tz, flags, numsuc, numpar, nummeta, prec = ufixed(data[off:o1]) |
401 data = [_pack(format, *data)] | 393 data = [_pack(format, *data)] |
402 for key, value in metadata: | 394 for key, value in metadata: |
403 data.append(key) | 395 data.append(key) |
404 data.append(value) | 396 data.append(value) |
405 return ''.join(data) | 397 return ''.join(data) |
398 | |
399 def _fm1readmarkers(data, off): | |
400 native = getattr(parsers, 'fm1readmarkers', None) | |
401 if not native: | |
402 return _fm1purereadmarkers(data, off) | |
403 stop = len(data) - _fm1fsize | |
404 return native(data, off, stop) | |
406 | 405 |
407 # mapping to read/write various marker formats | 406 # mapping to read/write various marker formats |
408 # <version> -> (decoder, encoder) | 407 # <version> -> (decoder, encoder) |
409 formats = {_fm0version: (_fm0readmarkers, _fm0encodeonemarker), | 408 formats = {_fm0version: (_fm0readmarkers, _fm0encodeonemarker), |
410 _fm1version: (_fm1readmarkers, _fm1encodeonemarker)} | 409 _fm1version: (_fm1readmarkers, _fm1encodeonemarker)} |