mercurial/revlog.py
changeset 46704 913485776542
parent 46607 e9901d01d135
child 46709 3d740058b467
equal deleted inserted replaced
46677:7ed7b13fc00a 46704:913485776542
    81 )
    81 )
    82 from .utils import (
    82 from .utils import (
    83     storageutil,
    83     storageutil,
    84     stringutil,
    84     stringutil,
    85 )
    85 )
       
    86 from .pure import parsers as pureparsers
    86 
    87 
    87 # blanked usage of all the name to prevent pyflakes constraints
    88 # blanked usage of all the name to prevent pyflakes constraints
    88 # We need these name available in the module for extensions.
    89 # We need these name available in the module for extensions.
    89 REVLOGV0
    90 REVLOGV0
    90 REVLOGV1
    91 REVLOGV1
   357         index, cache = parsers.parse_index2(data, inline)
   358         index, cache = parsers.parse_index2(data, inline)
   358         return index, cache
   359         return index, cache
   359 
   360 
   360     def packentry(self, entry, node, version, rev):
   361     def packentry(self, entry, node, version, rev):
   361         p = indexformatng_pack(*entry)
   362         p = indexformatng_pack(*entry)
       
   363         if rev == 0:
       
   364             p = versionformat_pack(version) + p[4:]
       
   365         return p
       
   366 
       
   367 
       
   368 indexformatv2 = struct.Struct(pureparsers.Index2Mixin.index_format)
       
   369 indexformatv2_pack = indexformatv2.pack
       
   370 
       
   371 
       
   372 class revlogv2io(object):
       
   373     def __init__(self):
       
   374         self.size = indexformatv2.size
       
   375 
       
   376     def parseindex(self, data, inline):
       
   377         index, cache = parsers.parse_index2(data, inline, revlogv2=True)
       
   378         return index, cache
       
   379 
       
   380     def packentry(self, entry, node, version, rev):
       
   381         p = indexformatv2_pack(*entry)
   362         if rev == 0:
   382         if rev == 0:
   363             p = versionformat_pack(version) + p[4:]
   383             p = versionformat_pack(version) + p[4:]
   364         return p
   384         return p
   365 
   385 
   366 
   386 
   648                 use_rust_index = self.opener.options.get(b'rust.index')
   668                 use_rust_index = self.opener.options.get(b'rust.index')
   649 
   669 
   650         self._io = revlogio()
   670         self._io = revlogio()
   651         if self.version == REVLOGV0:
   671         if self.version == REVLOGV0:
   652             self._io = revlogoldio()
   672             self._io = revlogoldio()
       
   673         elif fmt == REVLOGV2:
       
   674             self._io = revlogv2io()
   653         elif devel_nodemap:
   675         elif devel_nodemap:
   654             self._io = NodemapRevlogIO()
   676             self._io = NodemapRevlogIO()
   655         elif use_rust_index:
   677         elif use_rust_index:
   656             self._io = rustrevlogio()
   678             self._io = rustrevlogio()
   657         try:
   679         try:
  2335             deltainfo.base,
  2357             deltainfo.base,
  2336             link,
  2358             link,
  2337             p1r,
  2359             p1r,
  2338             p2r,
  2360             p2r,
  2339             node,
  2361             node,
       
  2362             0,
       
  2363             0,
  2340         )
  2364         )
       
  2365 
       
  2366         if self.version & 0xFFFF != REVLOGV2:
       
  2367             e = e[:8]
       
  2368 
  2341         self.index.append(e)
  2369         self.index.append(e)
  2342 
  2370 
  2343         entry = self._io.packentry(e, self.node, self.version, curr)
  2371         entry = self._io.packentry(e, self.node, self.version, curr)
  2344         self._writeentry(
  2372         self._writeentry(
  2345             transaction, ifh, dfh, entry, deltainfo.data, link, offset
  2373             transaction, ifh, dfh, entry, deltainfo.data, link, offset