# HG changeset patch # User Pierre-Yves David # Date 1624395128 -7200 # Node ID 5045ba2a3afd234ccc6484dd162b92313807bd9f # Parent c81a5297f185c22d47e285b8eb7e8617039a0d85 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 diff -r c81a5297f185 -r 5045ba2a3afd mercurial/revlogutils/rewrite.py --- 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)