diff -r 7ed7b13fc00a -r 913485776542 mercurial/revlog.py --- a/mercurial/revlog.py Fri Feb 12 16:13:34 2021 -0800 +++ b/mercurial/revlog.py Thu Jan 28 15:28:57 2021 +0100 @@ -83,6 +83,7 @@ storageutil, stringutil, ) +from .pure import parsers as pureparsers # blanked usage of all the name to prevent pyflakes constraints # We need these name available in the module for extensions. @@ -364,6 +365,25 @@ return p +indexformatv2 = struct.Struct(pureparsers.Index2Mixin.index_format) +indexformatv2_pack = indexformatv2.pack + + +class revlogv2io(object): + def __init__(self): + self.size = indexformatv2.size + + def parseindex(self, data, inline): + index, cache = parsers.parse_index2(data, inline, revlogv2=True) + return index, cache + + def packentry(self, entry, node, version, rev): + p = indexformatv2_pack(*entry) + if rev == 0: + p = versionformat_pack(version) + p[4:] + return p + + NodemapRevlogIO = None if util.safehasattr(parsers, 'parse_index_devel_nodemap'): @@ -650,6 +670,8 @@ self._io = revlogio() if self.version == REVLOGV0: self._io = revlogoldio() + elif fmt == REVLOGV2: + self._io = revlogv2io() elif devel_nodemap: self._io = NodemapRevlogIO() elif use_rust_index: @@ -2337,7 +2359,13 @@ p1r, p2r, node, + 0, + 0, ) + + if self.version & 0xFFFF != REVLOGV2: + e = e[:8] + self.index.append(e) entry = self._io.packentry(e, self.node, self.version, curr)