Merge branch 'cp/completion-clone-recurse-submodules'
[git] / t / t4119-apply-config.sh
1 #!/bin/sh
2 #
3 # Copyright (c) 2007 Junio C Hamano
4 #
5
6 test_description='git apply --whitespace=strip and configuration file.
7
8 '
9
10 . ./test-lib.sh
11
12 test_expect_success setup '
13         mkdir sub &&
14         echo A >sub/file1 &&
15         cp sub/file1 saved &&
16         git add sub/file1 &&
17         echo "B " >sub/file1 &&
18         git diff >patch.file
19 '
20
21 # Also handcraft GNU diff output; note this has trailing whitespace.
22 tr '_' ' ' >gpatch.file <<\EOF &&
23 --- file1       2007-02-21 01:04:24.000000000 -0800
24 +++ file1+      2007-02-21 01:07:44.000000000 -0800
25 @@ -1 +1 @@
26 -A
27 +B_
28 EOF
29
30 sed -e 's|file1|sub/&|' gpatch.file >gpatch-sub.file &&
31 sed -e '
32         /^--- /s|file1|a/sub/&|
33         /^+++ /s|file1|b/sub/&|
34 ' gpatch.file >gpatch-ab-sub.file &&
35
36 check_result () {
37         if grep " " "$1"
38         then
39                 echo "Eh?"
40                 false
41         elif grep B "$1"
42         then
43                 echo Happy
44         else
45                 echo "Huh?"
46                 false
47         fi
48 }
49
50 test_expect_success 'apply --whitespace=strip' '
51
52         rm -f sub/file1 &&
53         cp saved sub/file1 &&
54         git update-index --refresh &&
55
56         git apply --whitespace=strip patch.file &&
57         check_result sub/file1
58 '
59
60 test_expect_success 'apply --whitespace=strip from config' '
61
62         rm -f sub/file1 &&
63         cp saved sub/file1 &&
64         git update-index --refresh &&
65
66         git config apply.whitespace strip &&
67         git apply patch.file &&
68         check_result sub/file1
69 '
70
71 D=$(pwd)
72
73 test_expect_success 'apply --whitespace=strip in subdir' '
74
75         cd "$D" &&
76         git config --unset-all apply.whitespace &&
77         rm -f sub/file1 &&
78         cp saved sub/file1 &&
79         git update-index --refresh &&
80
81         cd sub &&
82         git apply --whitespace=strip ../patch.file &&
83         check_result file1
84 '
85
86 test_expect_success 'apply --whitespace=strip from config in subdir' '
87
88         cd "$D" &&
89         git config apply.whitespace strip &&
90         rm -f sub/file1 &&
91         cp saved sub/file1 &&
92         git update-index --refresh &&
93
94         cd sub &&
95         git apply ../patch.file &&
96         check_result file1
97 '
98
99 test_expect_success 'same in subdir but with traditional patch input' '
100
101         cd "$D" &&
102         git config apply.whitespace strip &&
103         rm -f sub/file1 &&
104         cp saved sub/file1 &&
105         git update-index --refresh &&
106
107         cd sub &&
108         git apply ../gpatch.file &&
109         check_result file1
110 '
111
112 test_expect_success 'same but with traditional patch input of depth 1' '
113
114         cd "$D" &&
115         git config apply.whitespace strip &&
116         rm -f sub/file1 &&
117         cp saved sub/file1 &&
118         git update-index --refresh &&
119
120         cd sub &&
121         git apply ../gpatch-sub.file &&
122         check_result file1
123 '
124
125 test_expect_success 'same but with traditional patch input of depth 2' '
126
127         cd "$D" &&
128         git config apply.whitespace strip &&
129         rm -f sub/file1 &&
130         cp saved sub/file1 &&
131         git update-index --refresh &&
132
133         cd sub &&
134         git apply ../gpatch-ab-sub.file &&
135         check_result file1
136 '
137
138 test_expect_success 'same but with traditional patch input of depth 1' '
139
140         cd "$D" &&
141         git config apply.whitespace strip &&
142         rm -f sub/file1 &&
143         cp saved sub/file1 &&
144         git update-index --refresh &&
145
146         git apply -p0 gpatch-sub.file &&
147         check_result sub/file1
148 '
149
150 test_expect_success 'same but with traditional patch input of depth 2' '
151
152         cd "$D" &&
153         git config apply.whitespace strip &&
154         rm -f sub/file1 &&
155         cp saved sub/file1 &&
156         git update-index --refresh &&
157
158         git apply gpatch-ab-sub.file &&
159         check_result sub/file1
160 '
161
162 test_expect_success 'in subdir with traditional patch input' '
163         cd "$D" &&
164         git config apply.whitespace strip &&
165         cat >.gitattributes <<-EOF &&
166         /* whitespace=blank-at-eol
167         sub/* whitespace=-blank-at-eol
168         EOF
169         rm -f sub/file1 &&
170         cp saved sub/file1 &&
171         git update-index --refresh &&
172
173         cd sub &&
174         git apply ../gpatch.file &&
175         echo "B " >expect &&
176         test_cmp expect file1
177 '
178
179 test_done