diff -r d57386e5c80e -r 724db234b790 mercurial/revlog.py --- a/mercurial/revlog.py Thu Apr 01 11:31:54 2021 +0200 +++ b/mercurial/revlog.py Thu Apr 08 00:34:16 2021 +0200 @@ -36,7 +36,6 @@ from .revlogutils.constants import ( FLAG_GENERALDELTA, FLAG_INLINE_DATA, - INDEX_ENTRY_V0, INDEX_HEADER, REVLOGV0, REVLOGV1, @@ -76,6 +75,7 @@ deltas as deltautil, flagutil, nodemap as nodemaputil, + revlogv0, sidedata as sidedatautil, ) from .utils import ( @@ -136,14 +136,6 @@ ) -def getoffset(q): - return int(q >> 16) - - -def gettype(q): - return int(q & 0xFFFF) - - def offset_type(offset, type): if (type & ~flagutil.REVIDX_KNOWN_FLAGS) != 0: raise ValueError(b'unknown revlog index flags') @@ -214,110 +206,6 @@ node = attr.ib(default=None) -class revlogoldindex(list): - entry_size = INDEX_ENTRY_V0.size - - @property - def nodemap(self): - msg = b"index.nodemap is deprecated, use index.[has_node|rev|get_rev]" - util.nouideprecwarn(msg, b'5.3', stacklevel=2) - return self._nodemap - - @util.propertycache - def _nodemap(self): - nodemap = nodemaputil.NodeMap({sha1nodeconstants.nullid: nullrev}) - for r in range(0, len(self)): - n = self[r][7] - nodemap[n] = r - return nodemap - - def has_node(self, node): - """return True if the node exist in the index""" - return node in self._nodemap - - def rev(self, node): - """return a revision for a node - - If the node is unknown, raise a RevlogError""" - return self._nodemap[node] - - def get_rev(self, node): - """return a revision for a node - - If the node is unknown, return None""" - return self._nodemap.get(node) - - def append(self, tup): - self._nodemap[tup[7]] = len(self) - super(revlogoldindex, self).append(tup) - - def __delitem__(self, i): - if not isinstance(i, slice) or not i.stop == -1 or i.step is not None: - raise ValueError(b"deleting slices only supports a:-1 with step 1") - for r in pycompat.xrange(i.start, len(self)): - del self._nodemap[self[r][7]] - super(revlogoldindex, self).__delitem__(i) - - def clearcaches(self): - self.__dict__.pop('_nodemap', None) - - def __getitem__(self, i): - if i == -1: - return (0, 0, 0, -1, -1, -1, -1, sha1nodeconstants.nullid) - return list.__getitem__(self, i) - - def entry_binary(self, rev): - """return the raw binary string representing a revision""" - entry = self[rev] - if gettype(entry[0]): - raise error.RevlogError( - _(b'index entry flags need revlog version 1') - ) - e2 = ( - getoffset(entry[0]), - entry[1], - entry[3], - entry[4], - self[entry[5]][7], - self[entry[6]][7], - entry[7], - ) - return INDEX_ENTRY_V0.pack(*e2) - - def pack_header(self, header): - """Pack header information in binary""" - return b'' - - -def parse_index_v0(data, inline): - s = INDEX_ENTRY_V0.size - index = [] - nodemap = nodemaputil.NodeMap({sha1nodeconstants.nullid: nullrev}) - n = off = 0 - l = len(data) - while off + s <= l: - cur = data[off : off + s] - off += s - e = INDEX_ENTRY_V0.unpack(cur) - # transform to revlogv1 format - e2 = ( - offset_type(e[0], 0), - e[1], - -1, - e[2], - e[3], - nodemap.get(e[4], nullrev), - nodemap.get(e[5], nullrev), - e[6], - ) - index.append(e2) - nodemap[e[6]] = n - n += 1 - - index = revlogoldindex(index) - return index, None - - def parse_index_v1(data, inline): # call the C implementation to parse the index data index, cache = parsers.parse_index2(data, inline) @@ -621,7 +509,7 @@ self._parse_index = parse_index_v1 if self.version == REVLOGV0: - self._parse_index = parse_index_v0 + self._parse_index = revlogv0.parse_index_v0 elif fmt == REVLOGV2: self._parse_index = parse_index_v2 elif devel_nodemap: