comparison mercurial/revlog.py @ 47245:de63be070e02

revlog: simplify entry update logic in `rewrite_sidedata` We don't need to rebuild the full entry. So lets just gather the data we need to pass to `replace_sidedata_info`. Differential Revision: https://phab.mercurial-scm.org/D10642
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Mon, 03 May 2021 23:45:05 +0200
parents 4abd474a10af
children 02a4463565ea
comparison
equal deleted inserted replaced
47244:78230d036e5d 47245:de63be070e02
3238 raise error.Abort(msg) 3238 raise error.Abort(msg)
3239 3239
3240 # Apply (potential) flags to add and to remove after running 3240 # Apply (potential) flags to add and to remove after running
3241 # the sidedata helpers 3241 # the sidedata helpers
3242 new_offset_flags = entry[0] | flags[0] & ~flags[1] 3242 new_offset_flags = entry[0] | flags[0] & ~flags[1]
3243 entry = (new_offset_flags,) + entry[1:8] 3243 entry_update = (
3244 entry += (current_offset, len(serialized_sidedata)) 3244 current_offset,
3245 len(serialized_sidedata),
3246 new_offset_flags,
3247 )
3245 3248
3246 # the sidedata computation might have move the file cursors around 3249 # the sidedata computation might have move the file cursors around
3247 dfh.seek(current_offset, os.SEEK_SET) 3250 dfh.seek(current_offset, os.SEEK_SET)
3248 dfh.write(serialized_sidedata) 3251 dfh.write(serialized_sidedata)
3249 new_entries.append(entry) 3252 new_entries.append(entry_update)
3250 current_offset += len(serialized_sidedata) 3253 current_offset += len(serialized_sidedata)
3251 if self._docket is not None: 3254 if self._docket is not None:
3252 self._docket.data_end = dfh.tell() 3255 self._docket.data_end = dfh.tell()
3253 3256
3254 # rewrite the new index entries 3257 # rewrite the new index entries
3255 ifh.seek(startrev * self.index.entry_size) 3258 ifh.seek(startrev * self.index.entry_size)
3256 for i, e in enumerate(new_entries): 3259 for i, e in enumerate(new_entries):
3257 rev = startrev + i 3260 rev = startrev + i
3258 self.index.replace_sidedata_info(rev, e[8], e[9], e[0]) 3261 self.index.replace_sidedata_info(rev, *e)
3259 packed = self.index.entry_binary(rev) 3262 packed = self.index.entry_binary(rev)
3260 if rev == 0 and self._docket is None: 3263 if rev == 0 and self._docket is None:
3261 header = self._format_flags | self._format_version 3264 header = self._format_flags | self._format_version
3262 header = self.index.pack_header(header) 3265 header = self.index.pack_header(header)
3263 packed = header + packed 3266 packed = header + packed