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 |