mercurial/revlog.py
changeset 47215 042388bba644
parent 47214 906a7bcaac86
child 47216 2bd4b5218918
equal deleted inserted replaced
47214:906a7bcaac86 47215:042388bba644
  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)