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'
--- 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):