Mercurial > hg
changeset 47473:5045ba2a3afd
censor: split the core of the logic into its own function
We now have a "generic" rewrite function (only able to do censoring for now)
and a thin wrapper that implement the `censor` API with it.
We are now ready to start incorporating strip specific changes.
Differential Revision: https://phab.mercurial-scm.org/D10904
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Tue, 22 Jun 2021 22:52:08 +0200 |
parents | c81a5297f185 |
children | c657beacdf2e |
files | mercurial/revlogutils/rewrite.py |
diffstat | 1 files changed, 22 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/revlogutils/rewrite.py Tue Jun 22 23:20:32 2021 +0200 +++ b/mercurial/revlogutils/rewrite.py Tue Jun 22 22:52:08 2021 +0200 @@ -127,26 +127,35 @@ def v2_censor(revlog, tr, censornode, tombstone=b''): """censors a revision in a "version 2" revlog""" - # General principle - # - # We create new revlog files (index/data/sidedata) to copy the content of - # the existing data without the censored data. - # - # We need to recompute new delta for any revision that used the censored - # revision as delta base. As the cumulative size of the new delta may be - # large, we store them in a temporary file until they are stored in their - # final destination. - # - # All data before the censored data can be blindly copied. The rest needs - # to be copied as we go and the associated index entry needs adjustement. + assert revlog._format_version != REVLOGV0, revlog._format_version + assert revlog._format_version != REVLOGV1, revlog._format_version + + censor_revs = {revlog.rev(censornode)} + _rewrite_v2(revlog, tr, censor_revs, tombstone) + + +def _rewrite_v2(revlog, tr, censor_revs, tombstone=b''): + """rewrite a revlog to censor some of its content + + General principle + We create new revlog files (index/data/sidedata) to copy the content of + the existing data without the censored data. + + We need to recompute new delta for any revision that used the censored + revision as delta base. As the cumulative size of the new delta may be + large, we store them in a temporary file until they are stored in their + final destination. + + All data before the censored data can be blindly copied. The rest needs + to be copied as we go and the associated index entry needs adjustement. + """ assert revlog._format_version != REVLOGV0, revlog._format_version assert revlog._format_version != REVLOGV1, revlog._format_version old_index = revlog.index docket = revlog._docket - censor_revs = {revlog.rev(censornode)} tombstone = storageutil.packmeta({b'censored': tombstone}, b'') first_excl_rev = min(censor_revs)