comparison mercurial/revlog.py @ 47387:75e1104f23a2

revlog: use dedicated code for reading sidedata We are about to introduce a new, dedicated, file to store sidedata. Before doing so, we make sidedata reading go through different code as reading data chunk. This will simplify some of the complexity of the next changesets. The reading is very simple right now and will need some improvement later to reuse some of the caching strategy we use for the data file. Differential Revision: https://phab.mercurial-scm.org/D10785
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Thu, 27 May 2021 04:09:30 +0200
parents 0d0fb091c49f
children e6292eb33384
comparison
equal deleted inserted replaced
47386:0d0fb091c49f 47387:75e1104f23a2
800 func = self._indexfp 800 func = self._indexfp
801 else: 801 else:
802 func = self._datafp 802 func = self._datafp
803 with func() as fp: 803 with func() as fp:
804 yield fp 804 yield fp
805
806 def _sidedatareadfp(self):
807 """file object suitable to read sidedata"""
808 return self._datareadfp()
805 809
806 def tiprev(self): 810 def tiprev(self):
807 return len(self.index) - 1 811 return len(self.index) - 1
808 812
809 def tip(self): 813 def tip(self):
2066 if self._inline: 2070 if self._inline:
2067 sidedata_offset += self.index.entry_size * (1 + rev) 2071 sidedata_offset += self.index.entry_size * (1 + rev)
2068 if sidedata_size == 0: 2072 if sidedata_size == 0:
2069 return {} 2073 return {}
2070 2074
2071 comp_segment = self._getsegment(sidedata_offset, sidedata_size) 2075 # XXX this need caching, as we do for data
2076 with self._sidedatareadfp() as sdf:
2077 sdf.seek(sidedata_offset)
2078 comp_segment = sdf.read(sidedata_size)
2079
2080 if len(comp_segment) < sidedata_size:
2081 filename = self._datafile
2082 length = sidedata_size
2083 offset = sidedata_offset
2084 got = len(comp_segment)
2085 m = PARTIAL_READ_MSG % (filename, length, offset, got)
2086 raise error.RevlogError(m)
2087
2072 comp = self.index[rev][11] 2088 comp = self.index[rev][11]
2073 if comp == COMP_MODE_PLAIN: 2089 if comp == COMP_MODE_PLAIN:
2074 segment = comp_segment 2090 segment = comp_segment
2075 elif comp == COMP_MODE_DEFAULT: 2091 elif comp == COMP_MODE_DEFAULT:
2076 segment = self._decompressor(comp_segment) 2092 segment = self._decompressor(comp_segment)