diff --git a/mercurial/copies.py b/mercurial/copies.py --- 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,8 +313,15 @@ 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 = {} - alwaysmatch = match.always() for r in revs: copies = all_copies.pop(r, None) if copies is None: