diff -r 824ee4aaa09b -r 0d8ff1f4ab0c mercurial/revlog.py --- a/mercurial/revlog.py Thu Apr 15 12:08:34 2021 +0200 +++ b/mercurial/revlog.py Thu Apr 08 00:01:11 2021 +0200 @@ -268,6 +268,24 @@ return (0, 0, 0, -1, -1, -1, -1, sha1nodeconstants.nullid) return list.__getitem__(self, i) + def entry_binary(self, rev, header): + """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) + class revlogoldio(object): def parseindex(self, data, inline): @@ -298,29 +316,6 @@ index = revlogoldindex(index) return index, None - def packentry(self, entry, node, version, rev): - """return the binary representation of an entry - - entry: a tuple containing all the values (see index.__getitem__) - node: a callback to convert a revision to nodeid - version: the changelog version - rev: the revision number - """ - 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], - node(entry[5]), - node(entry[6]), - entry[7], - ) - return INDEX_ENTRY_V0.pack(*e2) - # corresponds to uncompressed length of indexformatng (2 gigs, 4-byte # signed integer) @@ -333,24 +328,12 @@ index, cache = parsers.parse_index2(data, inline) return index, cache - def packentry(self, entry, node, version, rev): - p = INDEX_ENTRY_V1.pack(*entry) - if rev == 0: - p = INDEX_HEADER.pack(version) + p[4:] - return p - class revlogv2io(object): 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 = INDEX_ENTRY_V2.pack(*entry) - if rev == 0: - p = INDEX_HEADER.pack(version) + p[4:] - return p - NodemapRevlogIO = None @@ -2068,7 +2051,7 @@ self._inline = False io = self._io for i in self: - e = io.packentry(self.index[i], self.node, self.version, i) + e = self.index.entry_binary(i, self.version) fp.write(e) # the temp file replace the real index when we exit the context @@ -2390,7 +2373,7 @@ e = e[:8] self.index.append(e) - entry = self._io.packentry(e, self.node, self.version, curr) + entry = self.index.entry_binary(curr, self.version) self._writeentry( transaction, ifh, @@ -3243,5 +3226,5 @@ for i, entry in enumerate(new_entries): rev = startrev + i self.index.replace_sidedata_info(rev, entry[8], entry[9]) - packed = self._io.packentry(entry, self.node, self.version, rev) + packed = self.index.entry_binary(rev, self.version) fp.write(packed)