Mercurial > public > mercurial-scm > hg-stable
diff 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 |
line wrap: on
line diff
--- a/mercurial/obsolete.py Tue Jan 20 13:38:07 2015 -0500 +++ b/mercurial/obsolete.py Tue Jan 27 09:22:59 2015 -0500 @@ -285,7 +285,7 @@ _fm1metapair = 'BB' _fm1metapairsize = _calcsize('BB') -def _fm1readmarkers(data, off): +def _fm1purereadmarkers(data, off): # make some global constants local for performance noneflag = _fm1parentnone sha2flag = usingsha256 @@ -302,14 +302,6 @@ stop = len(data) - _fm1fsize ufixed = util.unpacker(_fm1fixed) - fast = getattr(parsers, 'fm1readmarker', None) - if fast is not None: - while off <= stop: - ret = fast(data, off) - yield ret[1:] - off += ret[0] - return - while off <= stop: # read fixed part o1 = off + fsize @@ -404,6 +396,13 @@ data.append(value) return ''.join(data) +def _fm1readmarkers(data, off): + native = getattr(parsers, 'fm1readmarkers', None) + if not native: + return _fm1purereadmarkers(data, off) + stop = len(data) - _fm1fsize + return native(data, off, stop) + # mapping to read/write various marker formats # <version> -> (decoder, encoder) formats = {_fm0version: (_fm0readmarkers, _fm0encodeonemarker),