# HG changeset patch # User Benoit Boissinot # Date 2006-09-07 12:12:39 # Node ID 035fd2029575324ad2341e4677f38a9f832da104 # Parent 32fd512ca7c0431ab75358ea764c66efe999d14f git --diff: fix traceback when getting mode change - use the manifest instead of the mode in the working dir if the diff is against two revisions - add a testcase diff --git a/mercurial/patch.py b/mercurial/patch.py --- a/mercurial/patch.py +++ b/mercurial/patch.py @@ -502,7 +502,10 @@ def diff(repo, node1=None, node2=None, f header.append('deleted file mode %s\n' % mode) else: omode = gitmode(mmap.execf(f)) - nmode = gitmode(util.is_exec(repo.wjoin(f), mmap.execf(f))) + if node2: + nmode = gitmode(mmap2.execf(f)) + else: + nmode = gitmode(util.is_exec(repo.wjoin(f), mmap.execf(f))) addmodehdr(header, omode, nmode) r = None if dodiff: diff --git a/tests/test-git-export b/tests/test-git-export --- a/tests/test-git-export +++ b/tests/test-git-export @@ -50,3 +50,7 @@ hg ci -mrenamemod -d '0 0' echo '% rename+mod+chmod' hg diff --git -r 6:tip | sed -e "s/\(+++ [a-zA-Z0-9_/.-]*\).*/\1/" \ -e "s/\(--- [a-zA-Z0-9_/.-]*\).*/\1/" + +echo '% nonexistent in tip+chmod' +hg diff --git -r 5:6 | sed -e "s/\(+++ [a-zA-Z0-9_/.-]*\).*/\1/" \ + -e "s/\(--- [a-zA-Z0-9_/.-]*\).*/\1/" diff --git a/tests/test-git-export.out b/tests/test-git-export.out --- a/tests/test-git-export.out +++ b/tests/test-git-export.out @@ -40,3 +40,7 @@ rename to dst 4 5 +a +% nonexistent in tip+chmod +diff --git a/src b/src +old mode 100644 +new mode 100755