changeset 47818:5b046c2e3000 stable

issue6528: implement _is_revision_affected using callback The delta comming from a bundle/stream does not exists in the revlog yet, so we will need other way to retrieve the same information. To prepare for this we split the function to use callbacks in the core logic. Differential Revision: https://phab.mercurial-scm.org/D11267
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Sat, 07 Aug 2021 12:38:48 +0200
parents 855463b5fe49
children c02ce6def30c
files mercurial/revlogutils/rewrite.py
diffstat 1 files changed, 15 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/revlogutils/rewrite.py	Fri Aug 06 12:10:36 2021 +0200
+++ b/mercurial/revlogutils/rewrite.py	Sat Aug 07 12:38:48 2021 +0200
@@ -563,6 +563,19 @@
 
 
 def _is_revision_affected(fl, filerev, metadata_cache=None):
+    full_text = lambda: fl._revlog.rawdata(filerev)
+    parent_revs = lambda: fl._revlog.parentrevs(filerev)
+    return _is_revision_affected_inner(
+        full_text, parent_revs, filerev, metadata_cache
+    )
+
+
+def _is_revision_affected_inner(
+    full_text,
+    parents_revs,
+    filerev,
+    metadata_cache=None,
+):
     """Mercurial currently (5.9rc0) uses `p1 == nullrev and p2 != nullrev` as a
     special meaning compared to the reverse in the context of filelog-based
     copytracing. issue6528 exists because new code assumed that parent ordering
@@ -570,7 +583,7 @@
     it's only used for filelog-based copytracing) and its parents are in the
     "wrong" order."""
     try:
-        raw_text = fl.rawdata(filerev)
+        raw_text = full_text()
     except error.CensoredNodeError:
         # We don't care about censored nodes as they never carry metadata
         return False
@@ -578,7 +591,7 @@
     if metadata_cache is not None:
         metadata_cache[filerev] = has_meta
     if has_meta:
-        (p1, p2) = fl.parentrevs(filerev)
+        (p1, p2) = parents_revs()
         if p1 != nullrev and p2 == nullrev:
             return True
     return False