mercurial/pure/parsers.py
changeset 52884 8de68446a5bd
parent 52585 72af9fa34832
equal deleted inserted replaced
52883:384ecbc8f8ca 52884:8de68446a5bd
   734             ishead[e[5]] = ishead[e[6]] = 0  # my parent are not
   734             ishead[e[5]] = ishead[e[6]] = 0  # my parent are not
   735         return [r for r, val in enumerate(ishead) if val]
   735         return [r for r, val in enumerate(ishead) if val]
   736 
   736 
   737 
   737 
   738 class IndexObject(BaseIndexObject):
   738 class IndexObject(BaseIndexObject):
   739     def __init__(self, data: ByteString):
   739     def __init__(self, data: ByteString, uses_generaldelta=False):
   740         assert len(data) % self.entry_size == 0, (
   740         assert len(data) % self.entry_size == 0, (
   741             len(data),
   741             len(data),
   742             self.entry_size,
   742             self.entry_size,
   743             len(data) % self.entry_size,
   743             len(data) % self.entry_size,
   744         )
   744         )
   811             else:
   811             else:
   812                 self._nm_root = self._nm_max_idx = self._nm_docket = None
   812                 self._nm_root = self._nm_max_idx = self._nm_docket = None
   813 
   813 
   814 
   814 
   815 class InlinedIndexObject(BaseIndexObject):
   815 class InlinedIndexObject(BaseIndexObject):
   816     def __init__(self, data, inline=0):
   816     def __init__(self, data, inline=0, uses_generaldelta=False):
   817         self._data = data
   817         self._data = data
   818         self._lgt = self._inline_scan(None)
   818         self._lgt = self._inline_scan(None)
   819         self._inline_scan(self._lgt)
   819         self._inline_scan(self._lgt)
   820         self._extra = []
   820         self._extra = []
   821 
   821 
   854     def _calculate_index(self, i: int) -> int:
   854     def _calculate_index(self, i: int) -> int:
   855         return self._offsets[i]
   855         return self._offsets[i]
   856 
   856 
   857 
   857 
   858 def parse_index2(
   858 def parse_index2(
   859     data: ByteString, inline, format=revlog_constants.REVLOGV1
   859     data: ByteString,
       
   860     inline,
       
   861     uses_generaldelta,
       
   862     format=revlog_constants.REVLOGV1,
   860 ) -> tuple[IndexObject | InlinedIndexObject, tuple[int, ByteString] | None]:
   863 ) -> tuple[IndexObject | InlinedIndexObject, tuple[int, ByteString] | None]:
   861     if format == revlog_constants.CHANGELOGV2:
   864     if format == revlog_constants.CHANGELOGV2:
   862         return parse_index_cl_v2(data)
   865         return parse_index_cl_v2(data)
   863     if not inline:
   866     if not inline:
   864         if format == revlog_constants.REVLOGV2:
   867         if format == revlog_constants.REVLOGV2:
   865             cls = IndexObject2
   868             cls = IndexObject2
   866         else:
   869         else:
   867             cls = IndexObject
   870             cls = IndexObject
   868         return cls(data), None
   871         return cls(data, uses_generaldelta), None
   869     cls = InlinedIndexObject
   872     cls = InlinedIndexObject
   870     return cls(data, inline), (0, data)
   873     return cls(data, inline, uses_generaldelta), (0, data)
   871 
   874 
   872 
   875 
   873 def parse_index_cl_v2(data):
   876 def parse_index_cl_v2(data):
   874     return IndexChangelogV2(data), None
   877     return IndexChangelogV2(data), None
   875 
   878 
   984             entry[revlog_constants.ENTRY_RANK],
   987             entry[revlog_constants.ENTRY_RANK],
   985         )
   988         )
   986         return self.index_format.pack(*data)
   989         return self.index_format.pack(*data)
   987 
   990 
   988 
   991 
   989 def parse_index_devel_nodemap(data, inline):
   992 def parse_index_devel_nodemap(data, inline, uses_generaldelta):
   990     """like parse_index2, but alway return a PersistentNodeMapIndexObject"""
   993     """like parse_index2, but always return a PersistentNodeMapIndexObject"""
   991     return PersistentNodeMapIndexObject(data), None
   994     return PersistentNodeMapIndexObject(data, uses_generaldelta), None
   992 
   995 
   993 
   996 
   994 def parse_dirstate(dmap, copymap, st):
   997 def parse_dirstate(dmap, copymap, st):
   995     parents = [st[:20], st[20:40]]
   998     parents = [st[:20], st[20:40]]
   996     # dereference fields so they will be local in loop
   999     # dereference fields so they will be local in loop