diff --git a/mercurial/pure/parsers.py b/mercurial/pure/parsers.py --- a/mercurial/pure/parsers.py +++ b/mercurial/pure/parsers.py @@ -243,21 +243,8 @@ def parse_index2(data, inline, revlogv2= class Index2Mixin(object): - # 6 bytes: offset - # 2 bytes: flags - # 4 bytes: compressed length - # 4 bytes: uncompressed length - # 4 bytes: base rev - # 4 bytes: link rev - # 4 bytes: parent 1 rev - # 4 bytes: parent 2 rev - # 32 bytes: nodeid - # 8 bytes: sidedata offset - # 4 bytes: sidedata compressed length - # 20 bytes: Padding to align to 96 bytes (see RevlogV2Plan wiki page) - index_format = b">Qiiiiii20s12xQi20x" - index_size = struct.calcsize(index_format) - assert index_size == 96, index_size + index_format = revlog_constants.INDEX_ENTRY_V2.format + index_size = revlog_constants.INDEX_ENTRY_V2.size null_item = (0, 0, 0, -1, -1, -1, -1, nullid, 0, 0) def replace_sidedata_info(self, i, sidedata_offset, sidedata_length): diff --git a/mercurial/revlog.py b/mercurial/revlog.py --- a/mercurial/revlog.py +++ b/mercurial/revlog.py @@ -43,6 +43,7 @@ from .revlogutils.constants import ( FLAG_INLINE_DATA, INDEX_ENTRY_V0, INDEX_ENTRY_V1, + INDEX_ENTRY_V2, REVLOGV0, REVLOGV1, REVLOGV1_FLAGS, @@ -87,7 +88,6 @@ from .utils import ( 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. @@ -352,20 +352,16 @@ class revlogio(object): return p -indexformatv2 = struct.Struct(pureparsers.Index2Mixin.index_format) -indexformatv2_pack = indexformatv2.pack - - class revlogv2io(object): def __init__(self): - self.size = indexformatv2.size + self.size = INDEX_ENTRY_V2.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) + p = INDEX_ENTRY_V2.pack(*entry) if rev == 0: p = versionformat_pack(version) + p[4:] return p diff --git a/mercurial/revlogutils/constants.py b/mercurial/revlogutils/constants.py --- a/mercurial/revlogutils/constants.py +++ b/mercurial/revlogutils/constants.py @@ -57,6 +57,21 @@ INDEX_ENTRY_V0 = struct.Struct(b">4l20s2 INDEX_ENTRY_V1 = struct.Struct(b">Qiiiiii20s12x") assert INDEX_ENTRY_V1.size == 32 * 2 +# 6 bytes: offset +# 2 bytes: flags +# 4 bytes: compressed length +# 4 bytes: uncompressed length +# 4 bytes: base rev +# 4 bytes: link rev +# 4 bytes: parent 1 rev +# 4 bytes: parent 2 rev +# 32 bytes: nodeid +# 8 bytes: sidedata offset +# 4 bytes: sidedata compressed length +# 20 bytes: Padding to align to 96 bytes (see RevlogV2Plan wiki page) +INDEX_ENTRY_V2 = struct.Struct(b">Qiiiiii20s12xQi20x") +assert INDEX_ENTRY_V2.size == 32 * 3 + # revlog index flags # For historical reasons, revlog's internal flags were exposed via the