# HG changeset patch # User Matt Mackall # Date 1327446989 21600 # Node ID d1c74c6151c9c327b58beb93f5132bf266cdde28 # Parent 341c58282b2583e8f728714e2752fc0140eac4d2 copies: eliminate criss-crosses when chaining Before the copies refactoring, we declared that if a and b were present in source and destination, we ignored copies between them. The refactored code could however report b was a copy of a and vice versa in a situation where we looked for differences between two identical changesets that copy a to b. y / x \ y' diff -r 341c58282b25 -r d1c74c6151c9 mercurial/copies.py --- a/mercurial/copies.py Sat Jan 21 21:39:27 2012 -0600 +++ b/mercurial/copies.py Tue Jan 24 17:16:29 2012 -0600 @@ -99,6 +99,13 @@ if v in src: # file is a copy of an existing file t[k] = v + + # remove criss-crossed copies + for k, v in t.items(): + if k in src and v in dst: + print "bad", k, v + del t[k] + return t def _tracefile(fctx, actx):