# HG changeset patch # User Pierre-Yves David # Date 2021-08-07 10:38:48 # Node ID 5b046c2e30004a1db7a91e252b2ece888c67594b # Parent 855463b5fe49128899287f8684b7753a9ece66de 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 diff --git a/mercurial/revlogutils/rewrite.py b/mercurial/revlogutils/rewrite.py --- a/mercurial/revlogutils/rewrite.py +++ b/mercurial/revlogutils/rewrite.py @@ -563,6 +563,19 @@ def _reorder_filelog_parents(repo, fl, t 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 @@ def _is_revision_affected(fl, filerev, m 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 @@ def _is_revision_affected(fl, filerev, m 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