Patchwork D10904: censor: split the core of the logic into its own function

login
register
mail settings
Submitter phabricator
Date June 22, 2021, 11:27 p.m.
Message ID <differential-rev-PHID-DREV-tcxmbskj63xdlrb2tjdg-req@mercurial-scm.org>
Download mbox | patch
Permalink /patch/49218/
State Superseded
Headers show

Comments

phabricator - June 22, 2021, 11:27 p.m.
marmoute created this revision.
Herald added a reviewer: hg-reviewers.
Herald added a subscriber: mercurial-patches.

REVISION SUMMARY
  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.

REPOSITORY
  rHG Mercurial

BRANCH
  default

REVISION DETAIL
  https://phab.mercurial-scm.org/D10904

AFFECTED FILES
  mercurial/revlogutils/rewrite.py

CHANGE DETAILS




To: marmoute, #hg-reviewers
Cc: mercurial-patches, mercurial-devel

Patch

diff --git a/mercurial/revlogutils/rewrite.py b/mercurial/revlogutils/rewrite.py
--- a/mercurial/revlogutils/rewrite.py
+++ b/mercurial/revlogutils/rewrite.py
@@ -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)