Mercurial > public > mercurial-scm > hg-stable
diff mercurial/revlog.py @ 47095:223b47235d1c
sidedata: enable sidedata computers to optionally rewrite flags
Sidedata computers may want to influence the flags of the revision they touch.
For example, the computer for changelog-based copytracing can add a flag to
signify that this revision might affect copytracing, inversely removing said
flag if the information is no longer applicable.
See inline documentation in `storageutil` for more details.
Differential Revision: https://phab.mercurial-scm.org/D10344
author | Rapha?l Gom?s <rgomes@octobus.net> |
---|---|
date | Thu, 08 Apr 2021 16:55:17 +0200 |
parents | 119790e1c67c |
children | 27f1191b1305 |
line wrap: on
line diff
--- a/mercurial/revlog.py Sat Apr 10 11:27:40 2021 +0200 +++ b/mercurial/revlog.py Thu Apr 08 16:55:17 2021 +0200 @@ -3105,7 +3105,7 @@ current_offset = fp.tell() for rev in range(startrev, endrev + 1): entry = self.index[rev] - new_sidedata = storageutil.run_sidedata_helpers( + new_sidedata, flags = storageutil.run_sidedata_helpers( store=self, sidedata_helpers=helpers, sidedata={}, @@ -3121,7 +3121,11 @@ # revlog. msg = b"Rewriting existing sidedata is not supported yet" raise error.Abort(msg) - entry = entry[:8] + + # Apply (potential) flags to add and to remove after running + # the sidedata helpers + new_offset_flags = entry[0] | flags[0] & ~flags[1] + entry = (new_offset_flags,) + entry[1:8] entry += (current_offset, len(serialized_sidedata)) fp.write(serialized_sidedata) @@ -3131,9 +3135,9 @@ # rewrite the new index entries with self._indexfp(b'w+') as fp: fp.seek(startrev * self.index.entry_size) - for i, entry in enumerate(new_entries): + for i, e in enumerate(new_entries): rev = startrev + i - self.index.replace_sidedata_info(rev, entry[8], entry[9]) + self.index.replace_sidedata_info(rev, e[8], e[9], e[0]) packed = self.index.entry_binary(rev) if rev == 0: header = self.index.pack_header(self.version)