diff --git a/mercurial/copies.py b/mercurial/copies.py index 2545ca662c64a5d10078dfdb03bdd375d3037e84_bWVyY3VyaWFsL2NvcGllcy5weQ==..c716c95d30275e883d9b70765a73cf7fdfd3de10_bWVyY3VyaWFsL2NvcGllcy5weQ== 100644 --- a/mercurial/copies.py +++ b/mercurial/copies.py @@ -17,6 +17,7 @@ match as matchmod, node, pathutil, + policy, pycompat, util, ) @@ -26,6 +27,8 @@ from .revlogutils import flagutil +rustmod = policy.importrust("copy_tracing") + def _filter(src, dst, t): """filters out invalid copies after chaining""" @@ -310,4 +313,12 @@ It returns the aggregated copies information for `targetrev`. """ + + alwaysmatch = match.always() + + if rustmod is not None and alwaysmatch: + return rustmod.combine_changeset_copies( + list(revs), children, targetrev, revinfo, isancestor + ) + all_copies = {} @@ -313,5 +324,4 @@ all_copies = {} - alwaysmatch = match.always() for r in revs: copies = all_copies.pop(r, None) if copies is None: