Mercurial > public > mercurial-scm > hg
diff mercurial/revlog.py @ 47037:d57386e5c80e
revlog: have an explicit "pack_header" method
Having to pass the version header when retrieving the binary version of every
single entry is a bit silly. So we extract that special logic in its own method.
This also prepare the move to newer revlog format, not storing the header within
an actual entry?
Differential Revision: https://phab.mercurial-scm.org/D10510
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Thu, 01 Apr 2021 11:31:54 +0200 |
parents | 5e64c93d5f94 |
children | 724db234b790 |
line wrap: on
line diff
--- a/mercurial/revlog.py Sat May 01 14:47:39 2021 +0200 +++ b/mercurial/revlog.py Thu Apr 01 11:31:54 2021 +0200 @@ -266,7 +266,7 @@ return (0, 0, 0, -1, -1, -1, -1, sha1nodeconstants.nullid) return list.__getitem__(self, i) - def entry_binary(self, rev, header): + def entry_binary(self, rev): """return the raw binary string representing a revision""" entry = self[rev] if gettype(entry[0]): @@ -284,6 +284,10 @@ ) 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 @@ -2041,7 +2045,10 @@ self.version &= ~FLAG_INLINE_DATA self._inline = False for i in self: - e = self.index.entry_binary(i, self.version) + e = self.index.entry_binary(i) + if i == 0: + header = self.index.pack_header(self.version) + e = header + e fp.write(e) # the temp file replace the real index when we exit the context @@ -2363,7 +2370,10 @@ e = e[:8] self.index.append(e) - entry = self.index.entry_binary(curr, self.version) + entry = self.index.entry_binary(curr) + if curr == 0: + header = self.index.pack_header(self.version) + entry = header + entry self._writeentry( transaction, ifh, @@ -3216,5 +3226,8 @@ for i, entry in enumerate(new_entries): rev = startrev + i self.index.replace_sidedata_info(rev, entry[8], entry[9]) - packed = self.index.entry_binary(rev, self.version) + packed = self.index.entry_binary(rev) + if rev == 0: + header = self.index.pack_header(self.version) + packed = header + packed fp.write(packed)