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