diff -p: squelch "diff --git" header for stat-dirty paths
[git/git.git] / t / t4011-diff-symlink.sh
1 #!/bin/sh
2 #
3 # Copyright (c) 2005 Johannes Schindelin
4 #
5
6 test_description='Test diff of symlinks.
7
8 '
9 . ./test-lib.sh
10 . "$TEST_DIRECTORY"/diff-lib.sh
11
12 test_expect_success SYMLINKS 'diff new symlink and file' '
13 cat >expected <<-\EOF &&
14 diff --git a/frotz b/frotz
15 new file mode 120000
16 index 0000000..7c465af
17 --- /dev/null
18 +++ b/frotz
19 @@ -0,0 +1 @@
20 +xyzzy
21 \ No newline at end of file
22 diff --git a/nitfol b/nitfol
23 new file mode 100644
24 index 0000000..7c465af
25 --- /dev/null
26 +++ b/nitfol
27 @@ -0,0 +1 @@
28 +xyzzy
29 EOF
30 ln -s xyzzy frotz &&
31 echo xyzzy >nitfol &&
32 git update-index &&
33 tree=$(git write-tree) &&
34 git update-index --add frotz nitfol &&
35 GIT_DIFF_OPTS=--unified=0 git diff-index -M -p $tree >current &&
36 compare_diff_patch expected current
37 '
38
39 test_expect_success SYMLINKS 'diff unchanged symlink and file' '
40 tree=$(git write-tree) &&
41 git update-index frotz nitfol &&
42 test -z "$(git diff-index --name-only $tree)"
43 '
44
45 test_expect_success SYMLINKS 'diff removed symlink and file' '
46 cat >expected <<-\EOF &&
47 diff --git a/frotz b/frotz
48 deleted file mode 120000
49 index 7c465af..0000000
50 --- a/frotz
51 +++ /dev/null
52 @@ -1 +0,0 @@
53 -xyzzy
54 \ No newline at end of file
55 diff --git a/nitfol b/nitfol
56 deleted file mode 100644
57 index 7c465af..0000000
58 --- a/nitfol
59 +++ /dev/null
60 @@ -1 +0,0 @@
61 -xyzzy
62 EOF
63 mv frotz frotz2 &&
64 mv nitfol nitfol2 &&
65 git diff-index -M -p $tree >current &&
66 compare_diff_patch expected current
67 '
68
69 test_expect_success SYMLINKS 'diff identical, but newly created symlink and file' '
70 >expected &&
71 rm -f frotz nitfol &&
72 echo xyzzy >nitfol &&
73 test-chmtime +10 nitfol &&
74 ln -s xyzzy frotz &&
75 git diff-index -M -p $tree >current &&
76 compare_diff_patch expected current &&
77
78 >expected &&
79 git diff-index -M -p -w $tree >current &&
80 compare_diff_patch expected current
81 '
82
83 test_expect_success SYMLINKS 'diff different symlink and file' '
84 cat >expected <<-\EOF &&
85 diff --git a/frotz b/frotz
86 index 7c465af..df1db54 120000
87 --- a/frotz
88 +++ b/frotz
89 @@ -1 +1 @@
90 -xyzzy
91 \ No newline at end of file
92 +yxyyz
93 \ No newline at end of file
94 diff --git a/nitfol b/nitfol
95 index 7c465af..df1db54 100644
96 --- a/nitfol
97 +++ b/nitfol
98 @@ -1 +1 @@
99 -xyzzy
100 +yxyyz
101 EOF
102 rm -f frotz &&
103 ln -s yxyyz frotz &&
104 echo yxyyz >nitfol &&
105 git diff-index -M -p $tree >current &&
106 compare_diff_patch expected current
107 '
108
109 test_expect_success SYMLINKS 'diff symlinks with non-existing targets' '
110 ln -s narf pinky &&
111 ln -s take\ over brain &&
112 test_must_fail git diff --no-index pinky brain >output 2>output.err &&
113 grep narf output &&
114 ! test -s output.err
115 '
116
117 test_expect_success SYMLINKS 'setup symlinks with attributes' '
118 echo "*.bin diff=bin" >>.gitattributes &&
119 echo content >file.bin &&
120 ln -s file.bin link.bin &&
121 git add -N file.bin link.bin
122 '
123
124 test_expect_success SYMLINKS 'symlinks do not respect userdiff config by path' '
125 cat >expect <<-\EOF &&
126 diff --git a/file.bin b/file.bin
127 index e69de29..d95f3ad 100644
128 Binary files a/file.bin and b/file.bin differ
129 diff --git a/link.bin b/link.bin
130 index e69de29..dce41ec 120000
131 --- a/link.bin
132 +++ b/link.bin
133 @@ -0,0 +1 @@
134 +file.bin
135 \ No newline at end of file
136 EOF
137 git config diff.bin.binary true &&
138 git diff file.bin link.bin >actual &&
139 test_cmp expect actual
140 '
141
142 test_done