3143 msg = "cannot rewrite_sidedata of a delayed revlog" |
3143 msg = "cannot rewrite_sidedata of a delayed revlog" |
3144 raise error.ProgrammingError(msg) |
3144 raise error.ProgrammingError(msg) |
3145 |
3145 |
3146 new_entries = [] |
3146 new_entries = [] |
3147 # append the new sidedata |
3147 # append the new sidedata |
3148 with self._datafp(b'a+') as fp: |
3148 with self._datafp(b'a+') as dfh: |
3149 # Maybe this bug still exists, see revlog._writeentry |
3149 # Maybe this bug still exists, see revlog._writeentry |
3150 fp.seek(0, os.SEEK_END) |
3150 dfh.seek(0, os.SEEK_END) |
3151 current_offset = fp.tell() |
3151 current_offset = dfh.tell() |
3152 for rev in range(startrev, endrev + 1): |
3152 for rev in range(startrev, endrev + 1): |
3153 entry = self.index[rev] |
3153 entry = self.index[rev] |
3154 new_sidedata, flags = sidedatautil.run_sidedata_helpers( |
3154 new_sidedata, flags = sidedatautil.run_sidedata_helpers( |
3155 store=self, |
3155 store=self, |
3156 sidedata_helpers=helpers, |
3156 sidedata_helpers=helpers, |
3172 # the sidedata helpers |
3172 # the sidedata helpers |
3173 new_offset_flags = entry[0] | flags[0] & ~flags[1] |
3173 new_offset_flags = entry[0] | flags[0] & ~flags[1] |
3174 entry = (new_offset_flags,) + entry[1:8] |
3174 entry = (new_offset_flags,) + entry[1:8] |
3175 entry += (current_offset, len(serialized_sidedata)) |
3175 entry += (current_offset, len(serialized_sidedata)) |
3176 |
3176 |
3177 fp.write(serialized_sidedata) |
3177 dfh.write(serialized_sidedata) |
3178 new_entries.append(entry) |
3178 new_entries.append(entry) |
3179 current_offset += len(serialized_sidedata) |
3179 current_offset += len(serialized_sidedata) |
3180 |
3180 |
3181 # rewrite the new index entries |
3181 # rewrite the new index entries |
3182 with self._indexfp(b'r+') as fp: |
3182 with self._indexfp(b'r+') as ifh: |
3183 fp.seek(startrev * self.index.entry_size) |
3183 fp.seek(startrev * self.index.entry_size) |
3184 for i, e in enumerate(new_entries): |
3184 for i, e in enumerate(new_entries): |
3185 rev = startrev + i |
3185 rev = startrev + i |
3186 self.index.replace_sidedata_info(rev, e[8], e[9], e[0]) |
3186 self.index.replace_sidedata_info(rev, e[8], e[9], e[0]) |
3187 packed = self.index.entry_binary(rev) |
3187 packed = self.index.entry_binary(rev) |
3188 if rev == 0: |
3188 if rev == 0: |
3189 header = self._format_flags | self._format_version |
3189 header = self._format_flags | self._format_version |
3190 header = self.index.pack_header(header) |
3190 header = self.index.pack_header(header) |
3191 packed = header + packed |
3191 packed = header + packed |
3192 fp.write(packed) |
3192 ifh.write(packed) |