Merge branch 'jc/maint-fix-mailinfo-strip' into maint
[git] / t / t4017-diff-retval.sh
1 #!/bin/sh
2
3 test_description='Return value of diffs'
4
5 . ./test-lib.sh
6
7 test_expect_success 'setup' '
8         echo "1 " >a &&
9         git add . &&
10         git commit -m zeroth &&
11         echo 1 >a &&
12         git add . &&
13         git commit -m first &&
14         echo 2 >b &&
15         git add . &&
16         git commit -a -m second
17 '
18
19 test_expect_success 'git diff --quiet -w  HEAD^^ HEAD^' '
20         git diff --quiet -w HEAD^^ HEAD^
21 '
22
23 test_expect_success 'git diff --quiet HEAD^^ HEAD^' '
24         test_must_fail git diff --quiet HEAD^^ HEAD^
25 '
26
27 test_expect_success 'git diff --quiet -w  HEAD^ HEAD' '
28         test_must_fail git diff --quiet -w HEAD^ HEAD
29 '
30
31 test_expect_success 'git diff-tree HEAD^ HEAD' '
32         git diff-tree --exit-code HEAD^ HEAD
33         test $? = 1
34 '
35 test_expect_success 'git diff-tree HEAD^ HEAD -- a' '
36         git diff-tree --exit-code HEAD^ HEAD -- a
37         test $? = 0
38 '
39 test_expect_success 'git diff-tree HEAD^ HEAD -- b' '
40         git diff-tree --exit-code HEAD^ HEAD -- b
41         test $? = 1
42 '
43 test_expect_success 'echo HEAD | git diff-tree --stdin' '
44         echo $(git rev-parse HEAD) | git diff-tree --exit-code --stdin
45         test $? = 1
46 '
47 test_expect_success 'git diff-tree HEAD HEAD' '
48         git diff-tree --exit-code HEAD HEAD
49         test $? = 0
50 '
51 test_expect_success 'git diff-files' '
52         git diff-files --exit-code
53         test $? = 0
54 '
55 test_expect_success 'git diff-index --cached HEAD' '
56         git diff-index --exit-code --cached HEAD
57         test $? = 0
58 '
59 test_expect_success 'git diff-index --cached HEAD^' '
60         git diff-index --exit-code --cached HEAD^
61         test $? = 1
62 '
63 test_expect_success 'git diff-index --cached HEAD^' '
64         echo text >>b &&
65         echo 3 >c &&
66         git add . && {
67                 git diff-index --exit-code --cached HEAD^
68                 test $? = 1
69         }
70 '
71 test_expect_success 'git diff-tree -Stext HEAD^ HEAD -- b' '
72         git commit -m "text in b" && {
73                 git diff-tree -p --exit-code -Stext HEAD^ HEAD -- b
74                 test $? = 1
75         }
76 '
77 test_expect_success 'git diff-tree -Snot-found HEAD^ HEAD -- b' '
78         git diff-tree -p --exit-code -Snot-found HEAD^ HEAD -- b
79         test $? = 0
80 '
81 test_expect_success 'git diff-files' '
82         echo 3 >>c && {
83                 git diff-files --exit-code
84                 test $? = 1
85         }
86 '
87 test_expect_success 'git diff-index --cached HEAD' '
88         git update-index c && {
89                 git diff-index --exit-code --cached HEAD
90                 test $? = 1
91         }
92 '
93
94 test_expect_success '--check --exit-code returns 0 for no difference' '
95
96         git diff --check --exit-code
97
98 '
99
100 test_expect_success '--check --exit-code returns 1 for a clean difference' '
101
102         echo "good" > a &&
103         git diff --check --exit-code
104         test $? = 1
105
106 '
107
108 test_expect_success '--check --exit-code returns 3 for a dirty difference' '
109
110         echo "bad   " >> a &&
111         git diff --check --exit-code
112         test $? = 3
113
114 '
115
116 test_expect_success '--check with --no-pager returns 2 for dirty difference' '
117
118         git --no-pager diff --check
119         test $? = 2
120
121 '
122
123
124 test_expect_success 'check should test not just the last line' '
125         echo "" >>a &&
126         git --no-pager diff --check
127         test $? = 2
128
129 '
130
131 test_expect_success 'check detects leftover conflict markers' '
132         git reset --hard &&
133         git checkout HEAD^ &&
134         echo binary >>b &&
135         git commit -m "side" b &&
136         test_must_fail git merge master &&
137         git add b && (
138                 git --no-pager diff --cached --check >test.out
139                 test $? = 2
140         ) &&
141         test 3 = $(grep "conflict marker" test.out | wc -l) &&
142         git reset --hard
143 '
144
145 test_done