mercurial/obsolete.py
changeset 24019 26fbf07482b2
parent 24018 26d6a6a78c1d
child 24044 e0e6dd806b23
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)}