]>
Commit | Line | Data |
---|---|---|
18bc7616 JK |
1 | #!/bin/sh |
2 | ||
3 | test_description='add -i basic tests' | |
4 | . ./test-lib.sh | |
535d9742 | 5 | . "$TEST_DIRECTORY"/lib-prereq-FILEMODE.sh |
18bc7616 | 6 | |
f0459319 | 7 | test_expect_success PERL 'setup (initial)' ' |
18bc7616 JK |
8 | echo content >file && |
9 | git add file && | |
10 | echo more >>file && | |
11 | echo lines >>file | |
12 | ' | |
f0459319 | 13 | test_expect_success PERL 'status works (initial)' ' |
18bc7616 JK |
14 | git add -i </dev/null >output && |
15 | grep "+1/-0 *+2/-0 file" output | |
16 | ' | |
f0459319 ÆAB |
17 | |
18 | test_expect_success PERL 'setup expected' ' | |
18bc7616 JK |
19 | cat >expected <<EOF |
20 | new file mode 100644 | |
21 | index 0000000..d95f3ad | |
22 | --- /dev/null | |
23 | +++ b/file | |
24 | @@ -0,0 +1 @@ | |
25 | +content | |
26 | EOF | |
f0459319 ÆAB |
27 | ' |
28 | ||
29 | test_expect_success PERL 'diff works (initial)' ' | |
18bc7616 JK |
30 | (echo d; echo 1) | git add -i >output && |
31 | sed -ne "/new file/,/content/p" <output >diff && | |
82ebb0b6 | 32 | test_cmp expected diff |
18bc7616 | 33 | ' |
f0459319 | 34 | test_expect_success PERL 'revert works (initial)' ' |
18bc7616 JK |
35 | git add file && |
36 | (echo r; echo 1) | git add -i && | |
37 | git ls-files >output && | |
38 | ! grep . output | |
39 | ' | |
40 | ||
f0459319 | 41 | test_expect_success PERL 'setup (commit)' ' |
18bc7616 JK |
42 | echo baseline >file && |
43 | git add file && | |
44 | git commit -m commit && | |
45 | echo content >>file && | |
46 | git add file && | |
47 | echo more >>file && | |
48 | echo lines >>file | |
49 | ' | |
f0459319 | 50 | test_expect_success PERL 'status works (commit)' ' |
18bc7616 JK |
51 | git add -i </dev/null >output && |
52 | grep "+1/-0 *+2/-0 file" output | |
53 | ' | |
f0459319 ÆAB |
54 | |
55 | test_expect_success PERL 'setup expected' ' | |
18bc7616 JK |
56 | cat >expected <<EOF |
57 | index 180b47c..b6f2c08 100644 | |
58 | --- a/file | |
59 | +++ b/file | |
60 | @@ -1 +1,2 @@ | |
61 | baseline | |
62 | +content | |
63 | EOF | |
f0459319 ÆAB |
64 | ' |
65 | ||
66 | test_expect_success PERL 'diff works (commit)' ' | |
18bc7616 JK |
67 | (echo d; echo 1) | git add -i >output && |
68 | sed -ne "/^index/,/content/p" <output >diff && | |
82ebb0b6 | 69 | test_cmp expected diff |
18bc7616 | 70 | ' |
f0459319 | 71 | test_expect_success PERL 'revert works (commit)' ' |
18bc7616 JK |
72 | git add file && |
73 | (echo r; echo 1) | git add -i && | |
74 | git add -i </dev/null >output && | |
75 | grep "unchanged *+3/-0 file" output | |
76 | ' | |
77 | ||
f0459319 ÆAB |
78 | |
79 | test_expect_success PERL 'setup expected' ' | |
ac083c47 TR |
80 | cat >expected <<EOF |
81 | EOF | |
f0459319 ÆAB |
82 | ' |
83 | ||
84 | test_expect_success PERL 'setup fake editor' ' | |
85 | cat >fake_editor.sh <<EOF | |
86 | EOF | |
87 | chmod a+x fake_editor.sh && | |
88 | test_set_editor "$(pwd)/fake_editor.sh" && | |
89 | ' | |
90 | ||
91 | test_expect_success PERL 'dummy edit works' ' | |
ac083c47 TR |
92 | (echo e; echo a) | git add -p && |
93 | git diff > diff && | |
94 | test_cmp expected diff | |
95 | ' | |
96 | ||
f0459319 | 97 | test_expect_success PERL 'setup patch' ' |
ac083c47 TR |
98 | cat >patch <<EOF |
99 | @@ -1,1 +1,4 @@ | |
100 | this | |
101 | +patch | |
f0459319 | 102 | -does not |
ac083c47 TR |
103 | apply |
104 | EOF | |
f0459319 ÆAB |
105 | ' |
106 | ||
107 | test_expect_success PERL 'setup fake editor' ' | |
108 | echo "#!$SHELL_PATH" >fake_editor.sh && | |
109 | cat >>fake_editor.sh <<\EOF && | |
ac083c47 TR |
110 | mv -f "$1" oldpatch && |
111 | mv -f patch "$1" | |
112 | EOF | |
f0459319 ÆAB |
113 | chmod a+x fake_editor.sh && |
114 | test_set_editor "$(pwd)/fake_editor.sh" | |
115 | ' | |
116 | ||
117 | test_expect_success PERL 'bad edit rejected' ' | |
ac083c47 TR |
118 | git reset && |
119 | (echo e; echo n; echo d) | git add -p >output && | |
120 | grep "hunk does not apply" output | |
121 | ' | |
122 | ||
f0459319 | 123 | test_expect_success PERL 'setup patch' ' |
ac083c47 TR |
124 | cat >patch <<EOF |
125 | this patch | |
126 | is garbage | |
127 | EOF | |
f0459319 ÆAB |
128 | ' |
129 | ||
130 | test_expect_success PERL 'garbage edit rejected' ' | |
ac083c47 TR |
131 | git reset && |
132 | (echo e; echo n; echo d) | git add -p >output && | |
133 | grep "hunk does not apply" output | |
134 | ' | |
135 | ||
f0459319 | 136 | test_expect_success PERL 'setup patch' ' |
ac083c47 TR |
137 | cat >patch <<EOF |
138 | @@ -1,0 +1,0 @@ | |
139 | baseline | |
140 | +content | |
141 | +newcontent | |
142 | +lines | |
143 | EOF | |
f0459319 ÆAB |
144 | ' |
145 | ||
146 | test_expect_success PERL 'setup expected' ' | |
ac083c47 TR |
147 | cat >expected <<EOF |
148 | diff --git a/file b/file | |
149 | index b5dd6c9..f910ae9 100644 | |
150 | --- a/file | |
151 | +++ b/file | |
152 | @@ -1,4 +1,4 @@ | |
153 | baseline | |
154 | content | |
155 | -newcontent | |
156 | +more | |
157 | lines | |
158 | EOF | |
f0459319 ÆAB |
159 | ' |
160 | ||
161 | test_expect_success PERL 'real edit works' ' | |
ac083c47 TR |
162 | (echo e; echo n; echo d) | git add -p && |
163 | git diff >output && | |
164 | test_cmp expected output | |
165 | ' | |
166 | ||
f0459319 | 167 | test_expect_success PERL 'skip files similarly as commit -a' ' |
b145b211 PV |
168 | git reset && |
169 | echo file >.gitignore && | |
170 | echo changed >file && | |
171 | echo y | git add -p file && | |
172 | git diff >output && | |
173 | git reset && | |
174 | git commit -am commit && | |
175 | git diff >expected && | |
176 | test_cmp expected output && | |
177 | git reset --hard HEAD^ | |
178 | ' | |
179 | rm -f .gitignore | |
180 | ||
f0459319 | 181 | test_expect_success PERL,FILEMODE 'patch does not affect mode' ' |
b717a627 JK |
182 | git reset --hard && |
183 | echo content >>file && | |
184 | chmod +x file && | |
ca724686 | 185 | printf "n\\ny\\n" | git add -p && |
b717a627 JK |
186 | git show :file | grep content && |
187 | git diff file | grep "new mode" | |
188 | ' | |
189 | ||
f0459319 | 190 | test_expect_success PERL,FILEMODE 'stage mode but not hunk' ' |
ca724686 JK |
191 | git reset --hard && |
192 | echo content >>file && | |
193 | chmod +x file && | |
194 | printf "y\\nn\\n" | git add -p && | |
195 | git diff --cached file | grep "new mode" && | |
196 | git diff file | grep "+content" | |
197 | ' | |
198 | ||
87ca2eaa | 199 | |
f0459319 | 200 | test_expect_success PERL,FILEMODE 'stage mode and hunk' ' |
87ca2eaa KS |
201 | git reset --hard && |
202 | echo content >>file && | |
203 | chmod +x file && | |
204 | printf "y\\ny\\n" | git add -p && | |
205 | git diff --cached file | grep "new mode" && | |
206 | git diff --cached file | grep "+content" && | |
207 | test -z "$(git diff file)" | |
208 | ' | |
209 | ||
26ec126a | 210 | # end of tests disabled when filemode is not usable |
ca724686 | 211 | |
f0459319 | 212 | test_expect_success PERL 'setup again' ' |
32a90233 JS |
213 | git reset --hard && |
214 | test_chmod +x file && | |
215 | echo content >>file | |
216 | ' | |
217 | ||
f67182bf | 218 | # Write the patch file with a new line at the top and bottom |
f0459319 | 219 | test_expect_success PERL 'setup patch' ' |
f67182bf MG |
220 | cat >patch <<EOF |
221 | index 180b47c..b6f2c08 100644 | |
222 | --- a/file | |
223 | +++ b/file | |
224 | @@ -1,2 +1,4 @@ | |
225 | +firstline | |
226 | baseline | |
227 | content | |
228 | +lastline | |
229 | EOF | |
f0459319 ÆAB |
230 | ' |
231 | ||
f67182bf | 232 | # Expected output, similar to the patch but w/ diff at the top |
f0459319 | 233 | test_expect_success PERL 'setup expected' ' |
f67182bf MG |
234 | cat >expected <<EOF |
235 | diff --git a/file b/file | |
236 | index b6f2c08..61b9053 100755 | |
237 | --- a/file | |
238 | +++ b/file | |
239 | @@ -1,2 +1,4 @@ | |
240 | +firstline | |
241 | baseline | |
242 | content | |
243 | +lastline | |
244 | EOF | |
f0459319 ÆAB |
245 | ' |
246 | ||
f67182bf | 247 | # Test splitting the first patch, then adding both |
f0459319 | 248 | test_expect_success PERL 'add first line works' ' |
f67182bf MG |
249 | git commit -am "clear local changes" && |
250 | git apply patch && | |
251 | (echo s; echo y; echo y) | git add -p file && | |
252 | git diff --cached > diff && | |
253 | test_cmp expected diff | |
254 | ' | |
255 | ||
f0459319 | 256 | test_expect_success PERL 'setup expected' ' |
8947fdd5 JK |
257 | cat >expected <<EOF |
258 | diff --git a/non-empty b/non-empty | |
259 | deleted file mode 100644 | |
260 | index d95f3ad..0000000 | |
261 | --- a/non-empty | |
262 | +++ /dev/null | |
263 | @@ -1 +0,0 @@ | |
264 | -content | |
265 | EOF | |
f0459319 ÆAB |
266 | ' |
267 | ||
268 | test_expect_success PERL 'deleting a non-empty file' ' | |
8947fdd5 JK |
269 | git reset --hard && |
270 | echo content >non-empty && | |
271 | git add non-empty && | |
272 | git commit -m non-empty && | |
273 | rm non-empty && | |
274 | echo y | git add -p non-empty && | |
275 | git diff --cached >diff && | |
276 | test_cmp expected diff | |
277 | ' | |
278 | ||
f0459319 | 279 | test_expect_success PERL 'setup expected' ' |
24ab81ae JK |
280 | cat >expected <<EOF |
281 | diff --git a/empty b/empty | |
282 | deleted file mode 100644 | |
283 | index e69de29..0000000 | |
284 | EOF | |
f0459319 | 285 | ' |
24ab81ae | 286 | |
f0459319 | 287 | test_expect_success PERL 'deleting an empty file' ' |
24ab81ae JK |
288 | git reset --hard && |
289 | > empty && | |
290 | git add empty && | |
291 | git commit -m empty && | |
292 | rm empty && | |
293 | echo y | git add -p empty && | |
294 | git diff --cached >diff && | |
295 | test_cmp expected diff | |
296 | ' | |
297 | ||
18bc7616 | 298 | test_done |