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
--- a/mercurial/patch.py Thu Sep 07 14:01:00 2006 +0200
+++ b/mercurial/patch.py Thu Sep 07 14:12:39 2006 +0200
@@ -502,7 +502,10 @@
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:
--- a/tests/test-git-export Thu Sep 07 14:01:00 2006 +0200
+++ b/tests/test-git-export Thu Sep 07 14:12:39 2006 +0200
@@ -50,3 +50,7 @@
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/"
--- a/tests/test-git-export.out Thu Sep 07 14:01:00 2006 +0200
+++ b/tests/test-git-export.out Thu Sep 07 14:12:39 2006 +0200
@@ -40,3 +40,7 @@
4
5
+a
+% nonexistent in tip+chmod
+diff --git a/src b/src
+old mode 100644
+new mode 100755