# HG changeset patch # User Alexis S. L. Carvalho # Date 1164058355 7200 # Node ID 454b3a8cdf28777f8ec3bfc527395b93a7e677b4 # Parent 49136e90517bbc06c31d42a32084cf29610d63a0 diff: improve detection of renames when diffing across many revisions diff -r 49136e90517b -r 454b3a8cdf28 mercurial/patch.py --- a/mercurial/patch.py Mon Nov 20 13:06:04 2006 -0800 +++ b/mercurial/patch.py Mon Nov 20 19:32:35 2006 -0200 @@ -471,14 +471,15 @@ r1, r2 = map(repo.changelog.rev, (n1, n2)) src = None while r2 > r1: - cl = getchangelog(n2)[0] - m = getmanifest(cl) - try: - src = getfile(f).renamed(m[f]) - except KeyError: - return None - if src: - f = src[0] + cl = getchangelog(n2) + if f in cl[3]: + m = getmanifest(cl[0]) + try: + src = getfile(f).renamed(m[f]) + except KeyError: + return None + if src: + f = src[0] n2 = repo.changelog.parents(n2)[0] r2 = repo.changelog.rev(n2) return src diff -r 49136e90517b -r 454b3a8cdf28 tests/test-git-export --- a/tests/test-git-export Mon Nov 20 13:06:04 2006 -0800 +++ b/tests/test-git-export Mon Nov 20 19:32:35 2006 -0200 @@ -60,3 +60,16 @@ hg import -mfoo b.diff cmp binfile.bin $TESTDIR/binfile.bin +echo +echo '% diff across many revisions' +hg mv dst dst2 +hg ci -m 'mv dst dst2' -d '0 0' + +echo >> start +hg ci -m 'change start' -d '0 0' + +hg revert -r -2 start +hg mv dst2 dst3 +hg ci -m 'mv dst2 dst3; revert start' -d '0 0' + +hg diff --git -r 9:11 diff -r 49136e90517b -r 454b3a8cdf28 tests/test-git-export.out --- a/tests/test-git-export.out Mon Nov 20 13:06:04 2006 -0800 +++ b/tests/test-git-export.out Mon Nov 20 19:32:35 2006 -0200 @@ -65,3 +65,8 @@ % import binary diff applying b.diff + +% diff across many revisions +diff --git a/dst2 b/dst3 +rename from dst2 +rename to dst3