# HG changeset patch # User Pierre-Yves David # Date 1639578521 -3600 # Node ID c5d6c874766a6c945088a13ee7e13ddf93c7f922 # Parent 52034c42c09d4a32a6c8b1218d0dd79f0b66d3a9 rank: actually persist revision's rank in changelog-v2 The changelog v2 format is now persisting whatever "rank" value is recorded. However keep in mind that for we do not record any value. Differential Revision: https://phab.mercurial-scm.org/D11937 diff -r 52034c42c09d -r c5d6c874766a mercurial/configitems.py --- a/mercurial/configitems.py Tue Dec 14 23:56:38 2021 +0100 +++ b/mercurial/configitems.py Wed Dec 15 15:28:41 2021 +0100 @@ -1357,10 +1357,10 @@ ) # Experimental TODOs: # -# * Same as for evlogv2 (but for the reduction of the number of files) +# * Same as for revlogv2 (but for the reduction of the number of files) +# * Actually computing the rank of changesets # * Improvement to investigate # - storing .hgtags fnode -# - storing `rank` of changesets # - storing branch related identifier coreconfigitem( diff -r 52034c42c09d -r c5d6c874766a mercurial/pure/parsers.py --- a/mercurial/pure/parsers.py Tue Dec 14 23:56:38 2021 +0100 +++ b/mercurial/pure/parsers.py Wed Dec 15 15:28:41 2021 +0100 @@ -880,6 +880,12 @@ class IndexChangelogV2(IndexObject2): index_format = revlog_constants.INDEX_ENTRY_CL_V2 + null_item = ( + IndexObject2.null_item[: revlog_constants.ENTRY_RANK] + + (0,) # rank of null is 0 + + IndexObject2.null_item[revlog_constants.ENTRY_RANK :] + ) + def _unpack_entry(self, rev, data, r=True): items = self.index_format.unpack(data) return ( @@ -898,7 +904,7 @@ items[revlog_constants.INDEX_ENTRY_V2_IDX_COMPRESSION_MODE] & 3, (items[revlog_constants.INDEX_ENTRY_V2_IDX_COMPRESSION_MODE] >> 2) & 3, - revlog_constants.RANK_UNKNOWN, + items[revlog_constants.INDEX_ENTRY_V2_IDX_RANK], ) def _pack_entry(self, rev, entry): @@ -919,6 +925,7 @@ entry[revlog_constants.ENTRY_DATA_COMPRESSION_MODE] & 3 | (entry[revlog_constants.ENTRY_SIDEDATA_COMPRESSION_MODE] & 3) << 2, + entry[revlog_constants.ENTRY_RANK], ) return self.index_format.pack(*data) diff -r 52034c42c09d -r c5d6c874766a mercurial/revlogutils/constants.py --- a/mercurial/revlogutils/constants.py Tue Dec 14 23:56:38 2021 +0100 +++ b/mercurial/revlogutils/constants.py Wed Dec 15 15:28:41 2021 +0100 @@ -192,8 +192,9 @@ # 8 bytes: sidedata offset # 4 bytes: sidedata compressed length # 1 bytes: compression mode (2 lower bit are data_compression_mode) -# 27 bytes: Padding to align to 96 bytes (see RevlogV2Plan wiki page) -INDEX_ENTRY_CL_V2 = struct.Struct(b">Qiiii20s12xQiB27x") +# 4 bytes: changeset rank (i.e. `len(::REV)`) +# 23 bytes: Padding to align to 96 bytes (see RevlogV2Plan wiki page) +INDEX_ENTRY_CL_V2 = struct.Struct(b">Qiiii20s12xQiBi23x") assert INDEX_ENTRY_CL_V2.size == 32 * 3, INDEX_ENTRY_CL_V2.size INDEX_ENTRY_V2_IDX_OFFSET = 0 INDEX_ENTRY_V2_IDX_COMPRESSED_LENGTH = 1 @@ -204,6 +205,7 @@ INDEX_ENTRY_V2_IDX_SIDEDATA_OFFSET = 6 INDEX_ENTRY_V2_IDX_SIDEDATA_COMPRESSED_LENGTH = 7 INDEX_ENTRY_V2_IDX_COMPRESSION_MODE = 8 +INDEX_ENTRY_V2_IDX_RANK = 9 # revlog index flags