diff: don't crash when merged-in addition is copied
Similar to what was explained in the previous commit, the diff code
expected copy source to be in "ctx1", which is not always the case
during a merge. This has been broken since before hg 2.0.
Also similar to the previous commit, we fix the problem by fixing up
the copy dict.
--- a/mercurial/patch.py Thu Jan 14 10:14:24 2016 -0800
+++ b/mercurial/patch.py Thu Jan 14 10:22:55 2016 -0800
@@ -2273,6 +2273,11 @@
modified = sorted(modifiedset)
added = sorted(addedset)
removed = sorted(removedset)
+ for dst, src in copy.items():
+ if src not in ctx1:
+ # Files merged in during a merge and then copied/renamed are
+ # reported as copies. We want to show them in the diff as additions.
+ del copy[dst]
def difffn(opts, losedata):
return trydiff(repo, revs, ctx1, ctx2, modified, added, removed,
--- a/tests/test-diffdir.t Thu Jan 14 10:14:24 2016 -0800
+++ b/tests/test-diffdir.t Thu Jan 14 10:22:55 2016 -0800
@@ -68,3 +68,10 @@
+++ b/a2
@@ -0,0 +1,1 @@
+foo
+ $ hg diff --nodates --git
+ diff --git a/a2 b/a2
+ new file mode 100644
+ --- /dev/null
+ +++ b/a2
+ @@ -0,0 +1,1 @@
+ +foo