]> git.ipfire.org Git - thirdparty/git.git/blame - t/t3701-add-interactive.sh
Merge branch 'os/fix-rebase-diff-no-prefix'
[thirdparty/git.git] / t / t3701-add-interactive.sh
CommitLineData
18bc7616
JK
1#!/bin/sh
2
3test_description='add -i basic tests'
4. ./test-lib.sh
535d9742 5. "$TEST_DIRECTORY"/lib-prereq-FILEMODE.sh
18bc7616 6
f0459319 7test_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 13test_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
18test_expect_success PERL 'setup expected' '
18bc7616
JK
19cat >expected <<EOF
20new file mode 100644
21index 0000000..d95f3ad
22--- /dev/null
23+++ b/file
24@@ -0,0 +1 @@
25+content
26EOF
f0459319
ÆAB
27'
28
29test_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 34test_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 41test_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 50test_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
55test_expect_success PERL 'setup expected' '
18bc7616
JK
56cat >expected <<EOF
57index 180b47c..b6f2c08 100644
58--- a/file
59+++ b/file
60@@ -1 +1,2 @@
61 baseline
62+content
63EOF
f0459319
ÆAB
64'
65
66test_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 71test_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
79test_expect_success PERL 'setup expected' '
ac083c47
TR
80cat >expected <<EOF
81EOF
f0459319
ÆAB
82'
83
84test_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
91test_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 97test_expect_success PERL 'setup patch' '
ac083c47
TR
98cat >patch <<EOF
99@@ -1,1 +1,4 @@
100 this
101+patch
f0459319 102-does not
ac083c47
TR
103 apply
104EOF
f0459319
ÆAB
105'
106
107test_expect_success PERL 'setup fake editor' '
108 echo "#!$SHELL_PATH" >fake_editor.sh &&
109 cat >>fake_editor.sh <<\EOF &&
ac083c47
TR
110mv -f "$1" oldpatch &&
111mv -f patch "$1"
112EOF
f0459319
ÆAB
113 chmod a+x fake_editor.sh &&
114 test_set_editor "$(pwd)/fake_editor.sh"
115'
116
117test_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 123test_expect_success PERL 'setup patch' '
ac083c47
TR
124cat >patch <<EOF
125this patch
126is garbage
127EOF
f0459319
ÆAB
128'
129
130test_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 136test_expect_success PERL 'setup patch' '
ac083c47
TR
137cat >patch <<EOF
138@@ -1,0 +1,0 @@
139 baseline
140+content
141+newcontent
142+lines
143EOF
f0459319
ÆAB
144'
145
146test_expect_success PERL 'setup expected' '
ac083c47
TR
147cat >expected <<EOF
148diff --git a/file b/file
149index b5dd6c9..f910ae9 100644
150--- a/file
151+++ b/file
152@@ -1,4 +1,4 @@
153 baseline
154 content
155-newcontent
156+more
157 lines
158EOF
f0459319
ÆAB
159'
160
161test_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 167test_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'
179rm -f .gitignore
180
f0459319 181test_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 190test_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 200test_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 212test_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 219test_expect_success PERL 'setup patch' '
f67182bf
MG
220cat >patch <<EOF
221index 180b47c..b6f2c08 100644
222--- a/file
223+++ b/file
224@@ -1,2 +1,4 @@
225+firstline
226 baseline
227 content
228+lastline
229EOF
f0459319
ÆAB
230'
231
f67182bf 232# Expected output, similar to the patch but w/ diff at the top
f0459319 233test_expect_success PERL 'setup expected' '
f67182bf
MG
234cat >expected <<EOF
235diff --git a/file b/file
236index b6f2c08..61b9053 100755
237--- a/file
238+++ b/file
239@@ -1,2 +1,4 @@
240+firstline
241 baseline
242 content
243+lastline
244EOF
f0459319
ÆAB
245'
246
f67182bf 247# Test splitting the first patch, then adding both
f0459319 248test_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 256test_expect_success PERL 'setup expected' '
8947fdd5
JK
257cat >expected <<EOF
258diff --git a/non-empty b/non-empty
259deleted file mode 100644
260index d95f3ad..0000000
261--- a/non-empty
262+++ /dev/null
263@@ -1 +0,0 @@
264-content
265EOF
f0459319
ÆAB
266'
267
268test_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 279test_expect_success PERL 'setup expected' '
24ab81ae
JK
280cat >expected <<EOF
281diff --git a/empty b/empty
282deleted file mode 100644
283index e69de29..0000000
284EOF
f0459319 285'
24ab81ae 286
f0459319 287test_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 298test_done