t4011: illustrate "diff-index -p" on stat-dirty paths
The plumbing that looks at the working tree, i.e. "diff-index" and "diff-files", always emit the "diff --git a/path b/path" header lines without anything else for paths that are only stat-dirty (i.e. different only because the cached stat information in the index no longer matches that of the working tree, but the real contents are the same), when these commands are run with "-p" option to produce patches. Illustrate this current behaviour. Also demonstrate that with the "-w" option, we (correctly) hold off showing a "diff --git" header until actual differences have been found. This also suppresses the header for merely stat-dirty files, which is inconsistent. Signed-off-by: Junio C Hamano <gitster@pobox.com>
Junio C Hamano committed
Feb 29, 2012 at 18:14 UTC
5597e84b514454f18bba7b13eee2feea04f0165b
1 file changed
+39
-7
t/t4011-diff-symlink.sh
+39
-7
@@ -9,7 +9,7 @@ test_description='Test diff of symlinks.
9
. ./test-lib.sh
10
. "$TEST_DIRECTORY"/diff-lib.sh
11
12
-test_expect_success SYMLINKS 'diff new symlink' '
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
@@ -19,22 +19,30 @@ test_expect_success SYMLINKS 'diff new symlink' '
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) &&
26
- git update-index --add frotz &&
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
31
-test_expect_success SYMLINKS 'diff unchanged symlink' '
39
+test_expect_success SYMLINKS 'diff unchanged symlink and file' '
40
tree=$(git write-tree) &&
33
- git update-index frotz &&
41
+ git update-index frotz nitfol &&
42
test -z "$(git diff-index --name-only $tree)"
43
'
44
37
-test_expect_success SYMLINKS 'diff removed symlink' '
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
@@ -44,22 +52,38 @@ test_expect_success SYMLINKS 'diff removed symlink' '
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
53
-test_expect_success SYMLINKS 'diff identical, but newly created symlink' '
69
+test_expect_success SYMLINKS 'diff identical, but newly created symlink and file' '
70
cat >expected <<-\EOF &&
71
diff --git a/frotz b/frotz
72
+ diff --git a/nitfol b/nitfol
73
EOF
74
+ rm -f frotz nitfol &&
75
+ echo xyzzy >nitfol &&
76
+ test-chmtime +10 nitfol &&
77
ln -s xyzzy frotz &&
78
git diff-index -M -p $tree >current &&
79
+ compare_diff_patch expected current &&
80
+
81
+ >expected &&
82
+ git diff-index -M -p -w $tree >current &&
83
compare_diff_patch expected current
84
'
85
62
-test_expect_success SYMLINKS 'diff different symlink' '
86
+test_expect_success SYMLINKS 'diff different symlink and file' '
87
cat >expected <<-\EOF &&
88
diff --git a/frotz b/frotz
89
index 7c465af..df1db54 120000
@@ -70,9 +94,17 @@ test_expect_success SYMLINKS 'diff different symlink' '
94
\ No newline at end of file
95
+yxyyz
96
\ No newline at end of file
97
+ diff --git a/nitfol b/nitfol
98
+ index 7c465af..df1db54 100644
99
+ --- a/nitfol
100
+ +++ b/nitfol
101
+ @@ -1 +1 @@
102
+ -xyzzy
103
+ +yxyyz
104
EOF
105
rm -f frotz &&
106
ln -s yxyyz frotz &&
107
+ echo yxyyz >nitfol &&
108
git diff-index -M -p $tree >current &&
109
compare_diff_patch expected current
110
'