# HG changeset patch # User Matt Mackall # Date 1176744292 18000 # Node ID 8aee687f021472e3e93ef307e8ca09446a9ce316 # Parent b633f470944e94c10348aeed07ea898b26032698 merge: fix quadratic behavior in find-copies diff --git a/mercurial/merge.py b/mercurial/merge.py --- a/mercurial/merge.py +++ b/mercurial/merge.py @@ -105,10 +105,15 @@ def findcopies(repo, m1, m2, ma, limit): def findold(fctx): "find files that path was copied from, back to linkrev limit" old = {} + seen = {} orig = fctx.path() visit = [fctx] while visit: fc = visit.pop() + s = str(fc) + if s in seen: + continue + seen[s] = 1 if fc.path() != orig and fc.path() not in old: old[fc.path()] = 1 if fc.rev() < limit: