]>
Commit | Line | Data |
---|---|---|
65d9fb48 JS |
1 | #!/bin/sh |
2 | # | |
3 | # Copyright (c) 2007 Johannes E. Schindelin | |
4 | # | |
5 | ||
6 | test_description='Test commit notes' | |
7 | ||
8 | . ./test-lib.sh | |
9 | ||
10 | cat > fake_editor.sh << \EOF | |
11 | echo "$MSG" > "$1" | |
12 | echo "$MSG" >& 2 | |
13 | EOF | |
14 | chmod a+x fake_editor.sh | |
cd067d3b JH |
15 | GIT_EDITOR=./fake_editor.sh |
16 | export GIT_EDITOR | |
65d9fb48 JS |
17 | |
18 | test_expect_success 'cannot annotate non-existing HEAD' ' | |
7aa4754e | 19 | (MSG=3 && export MSG && test_must_fail git notes add) |
65d9fb48 JS |
20 | ' |
21 | ||
22 | test_expect_success setup ' | |
23 | : > a1 && | |
24 | git add a1 && | |
25 | test_tick && | |
26 | git commit -m 1st && | |
27 | : > a2 && | |
28 | git add a2 && | |
29 | test_tick && | |
30 | git commit -m 2nd | |
31 | ' | |
32 | ||
33 | test_expect_success 'need valid notes ref' ' | |
34 | (MSG=1 GIT_NOTES_REF=/ && export MSG GIT_NOTES_REF && | |
7aa4754e | 35 | test_must_fail git notes add) && |
65d9fb48 JS |
36 | (MSG=2 GIT_NOTES_REF=/ && export MSG GIT_NOTES_REF && |
37 | test_must_fail git notes show) | |
38 | ' | |
39 | ||
7aa4754e | 40 | test_expect_success 'refusing to add notes in refs/heads/' ' |
65d9fb48 JS |
41 | (MSG=1 GIT_NOTES_REF=refs/heads/bogus && |
42 | export MSG GIT_NOTES_REF && | |
7aa4754e | 43 | test_must_fail git notes add) |
65d9fb48 JS |
44 | ' |
45 | ||
7aa4754e | 46 | test_expect_success 'refusing to edit notes in refs/remotes/' ' |
65d9fb48 JS |
47 | (MSG=1 GIT_NOTES_REF=refs/remotes/bogus && |
48 | export MSG GIT_NOTES_REF && | |
49 | test_must_fail git notes edit) | |
50 | ' | |
51 | ||
52 | # 1 indicates caught gracefully by die, 128 means git-show barked | |
53 | test_expect_success 'handle empty notes gracefully' ' | |
54 | git notes show ; test 1 = $? | |
55 | ' | |
56 | ||
57 | test_expect_success 'create notes' ' | |
58 | git config core.notesRef refs/notes/commits && | |
7aa4754e | 59 | MSG=b4 git notes add && |
cd067d3b JH |
60 | test ! -f .git/NOTES_EDITMSG && |
61 | test 1 = $(git ls-tree refs/notes/commits | wc -l) && | |
7aa4754e | 62 | test b4 = $(git notes show) && |
cd067d3b JH |
63 | git show HEAD^ && |
64 | test_must_fail git notes show HEAD^ | |
65 | ' | |
66 | ||
67 | test_expect_success 'edit existing notes' ' | |
7aa4754e JH |
68 | MSG=b3 git notes edit && |
69 | test ! -f .git/NOTES_EDITMSG && | |
70 | test 1 = $(git ls-tree refs/notes/commits | wc -l) && | |
71 | test b3 = $(git notes show) && | |
72 | git show HEAD^ && | |
73 | test_must_fail git notes show HEAD^ | |
74 | ' | |
75 | ||
76 | test_expect_success 'cannot add note where one exists' ' | |
77 | ! MSG=b2 git notes add && | |
78 | test ! -f .git/NOTES_EDITMSG && | |
79 | test 1 = $(git ls-tree refs/notes/commits | wc -l) && | |
80 | test b3 = $(git notes show) && | |
81 | git show HEAD^ && | |
82 | test_must_fail git notes show HEAD^ | |
83 | ' | |
84 | ||
85 | test_expect_success 'can overwrite existing note with "git notes add -f"' ' | |
86 | MSG=b1 git notes add -f && | |
cd067d3b | 87 | test ! -f .git/NOTES_EDITMSG && |
65d9fb48 JS |
88 | test 1 = $(git ls-tree refs/notes/commits | wc -l) && |
89 | test b1 = $(git notes show) && | |
90 | git show HEAD^ && | |
91 | test_must_fail git notes show HEAD^ | |
92 | ' | |
93 | ||
94 | cat > expect << EOF | |
95 | commit 268048bfb8a1fb38e703baceb8ab235421bf80c5 | |
96 | Author: A U Thor <author@example.com> | |
97 | Date: Thu Apr 7 15:14:13 2005 -0700 | |
98 | ||
99 | 2nd | |
100 | ||
101 | Notes: | |
102 | b1 | |
103 | EOF | |
104 | ||
105 | test_expect_success 'show notes' ' | |
106 | ! (git cat-file commit HEAD | grep b1) && | |
107 | git log -1 > output && | |
108 | test_cmp expect output | |
109 | ' | |
7aa4754e | 110 | |
65d9fb48 JS |
111 | test_expect_success 'create multi-line notes (setup)' ' |
112 | : > a3 && | |
113 | git add a3 && | |
114 | test_tick && | |
115 | git commit -m 3rd && | |
116 | MSG="b3 | |
117 | c3c3c3c3 | |
7aa4754e | 118 | d3d3d3" git notes add |
65d9fb48 JS |
119 | ' |
120 | ||
121 | cat > expect-multiline << EOF | |
122 | commit 1584215f1d29c65e99c6c6848626553fdd07fd75 | |
123 | Author: A U Thor <author@example.com> | |
124 | Date: Thu Apr 7 15:15:13 2005 -0700 | |
125 | ||
126 | 3rd | |
127 | ||
128 | Notes: | |
129 | b3 | |
130 | c3c3c3c3 | |
131 | d3d3d3 | |
132 | EOF | |
133 | ||
134 | printf "\n" >> expect-multiline | |
135 | cat expect >> expect-multiline | |
136 | ||
137 | test_expect_success 'show multi-line notes' ' | |
138 | git log -2 > output && | |
139 | test_cmp expect-multiline output | |
140 | ' | |
cd067d3b | 141 | test_expect_success 'create -F notes (setup)' ' |
d9246d43 JH |
142 | : > a4 && |
143 | git add a4 && | |
144 | test_tick && | |
145 | git commit -m 4th && | |
146 | echo "xyzzy" > note5 && | |
7aa4754e | 147 | git notes add -F note5 |
d9246d43 JH |
148 | ' |
149 | ||
cd067d3b | 150 | cat > expect-F << EOF |
d9246d43 JH |
151 | commit 15023535574ded8b1a89052b32673f84cf9582b8 |
152 | Author: A U Thor <author@example.com> | |
153 | Date: Thu Apr 7 15:16:13 2005 -0700 | |
154 | ||
155 | 4th | |
156 | ||
157 | Notes: | |
d9246d43 | 158 | xyzzy |
d9246d43 JH |
159 | EOF |
160 | ||
cd067d3b JH |
161 | printf "\n" >> expect-F |
162 | cat expect-multiline >> expect-F | |
d9246d43 | 163 | |
cd067d3b | 164 | test_expect_success 'show -F notes' ' |
d9246d43 | 165 | git log -3 > output && |
cd067d3b | 166 | test_cmp expect-F output |
d9246d43 | 167 | ' |
65d9fb48 | 168 | |
66b2ed09 JH |
169 | cat >expect << EOF |
170 | commit 15023535574ded8b1a89052b32673f84cf9582b8 | |
171 | tree e070e3af51011e47b183c33adf9736736a525709 | |
172 | parent 1584215f1d29c65e99c6c6848626553fdd07fd75 | |
173 | author A U Thor <author@example.com> 1112912173 -0700 | |
174 | committer C O Mitter <committer@example.com> 1112912173 -0700 | |
175 | ||
176 | 4th | |
177 | EOF | |
178 | test_expect_success 'git log --pretty=raw does not show notes' ' | |
179 | git log -1 --pretty=raw >output && | |
180 | test_cmp expect output | |
181 | ' | |
182 | ||
183 | cat >>expect <<EOF | |
184 | ||
185 | Notes: | |
66b2ed09 | 186 | xyzzy |
66b2ed09 JH |
187 | EOF |
188 | test_expect_success 'git log --show-notes' ' | |
189 | git log -1 --pretty=raw --show-notes >output && | |
190 | test_cmp expect output | |
191 | ' | |
192 | ||
193 | test_expect_success 'git log --no-notes' ' | |
194 | git log -1 --no-notes >output && | |
cd067d3b | 195 | ! grep xyzzy output |
66b2ed09 JH |
196 | ' |
197 | ||
198 | test_expect_success 'git format-patch does not show notes' ' | |
199 | git format-patch -1 --stdout >output && | |
cd067d3b | 200 | ! grep xyzzy output |
66b2ed09 JH |
201 | ' |
202 | ||
203 | test_expect_success 'git format-patch --show-notes does show notes' ' | |
204 | git format-patch --show-notes -1 --stdout >output && | |
cd067d3b | 205 | grep xyzzy output |
66b2ed09 JH |
206 | ' |
207 | ||
7dccadf3 JH |
208 | for pretty in \ |
209 | "" --pretty --pretty=raw --pretty=short --pretty=medium \ | |
210 | --pretty=full --pretty=fuller --pretty=format:%s --oneline | |
66b2ed09 JH |
211 | do |
212 | case "$pretty" in | |
213 | "") p= not= negate="" ;; | |
7dccadf3 | 214 | ?*) p="$pretty" not=" not" negate="!" ;; |
66b2ed09 JH |
215 | esac |
216 | test_expect_success "git show $pretty does$not show notes" ' | |
217 | git show $p >output && | |
cd067d3b | 218 | eval "$negate grep xyzzy output" |
66b2ed09 JH |
219 | ' |
220 | done | |
221 | ||
cd067d3b | 222 | test_expect_success 'create -m notes (setup)' ' |
3b78cdbe JH |
223 | : > a5 && |
224 | git add a5 && | |
225 | test_tick && | |
226 | git commit -m 5th && | |
7aa4754e | 227 | git notes add -m spam -m "foo |
cd067d3b JH |
228 | bar |
229 | baz" | |
3b78cdbe JH |
230 | ' |
231 | ||
cd067d3b JH |
232 | whitespace=" " |
233 | cat > expect-m << EOF | |
3b78cdbe JH |
234 | commit bd1753200303d0a0344be813e504253b3d98e74d |
235 | Author: A U Thor <author@example.com> | |
236 | Date: Thu Apr 7 15:17:13 2005 -0700 | |
237 | ||
238 | 5th | |
239 | ||
cd067d3b JH |
240 | Notes: |
241 | spam | |
242 | $whitespace | |
243 | foo | |
244 | bar | |
245 | baz | |
246 | EOF | |
247 | ||
248 | printf "\n" >> expect-m | |
249 | cat expect-F >> expect-m | |
250 | ||
251 | test_expect_success 'show -m notes' ' | |
252 | git log -4 > output && | |
253 | test_cmp expect-m output | |
254 | ' | |
255 | ||
7aa4754e JH |
256 | test_expect_success 'remove note with add -f -F /dev/null (setup)' ' |
257 | git notes add -f -F /dev/null | |
a0b4dfa9 JH |
258 | ' |
259 | ||
260 | cat > expect-rm-F << EOF | |
261 | commit bd1753200303d0a0344be813e504253b3d98e74d | |
262 | Author: A U Thor <author@example.com> | |
263 | Date: Thu Apr 7 15:17:13 2005 -0700 | |
264 | ||
265 | 5th | |
266 | EOF | |
267 | ||
268 | printf "\n" >> expect-rm-F | |
269 | cat expect-F >> expect-rm-F | |
270 | ||
271 | test_expect_success 'verify note removal with -F /dev/null' ' | |
272 | git log -4 > output && | |
273 | test_cmp expect-rm-F output && | |
274 | ! git notes show | |
275 | ' | |
276 | ||
277 | test_expect_success 'do not create empty note with -m "" (setup)' ' | |
7aa4754e | 278 | git notes add -m "" |
a0b4dfa9 JH |
279 | ' |
280 | ||
281 | test_expect_success 'verify non-creation of note with -m ""' ' | |
282 | git log -4 > output && | |
283 | test_cmp expect-rm-F output && | |
284 | ! git notes show | |
285 | ' | |
286 | ||
348f199b JH |
287 | cat > expect-combine_m_and_F << EOF |
288 | foo | |
289 | ||
290 | xyzzy | |
291 | ||
292 | bar | |
293 | ||
294 | zyxxy | |
295 | ||
296 | baz | |
297 | EOF | |
298 | ||
299 | test_expect_success 'create note with combination of -m and -F' ' | |
300 | echo "xyzzy" > note_a && | |
301 | echo "zyxxy" > note_b && | |
302 | git notes add -m "foo" -F note_a -m "bar" -F note_b -m "baz" && | |
303 | git notes show > output && | |
304 | test_cmp expect-combine_m_and_F output | |
305 | ' | |
306 | ||
92b3385f | 307 | test_expect_success 'remove note with "git notes remove" (setup)' ' |
348f199b JH |
308 | git notes remove HEAD^ && |
309 | git notes remove | |
92b3385f JH |
310 | ' |
311 | ||
312 | cat > expect-rm-remove << EOF | |
313 | commit bd1753200303d0a0344be813e504253b3d98e74d | |
314 | Author: A U Thor <author@example.com> | |
315 | Date: Thu Apr 7 15:17:13 2005 -0700 | |
316 | ||
317 | 5th | |
318 | ||
319 | commit 15023535574ded8b1a89052b32673f84cf9582b8 | |
320 | Author: A U Thor <author@example.com> | |
321 | Date: Thu Apr 7 15:16:13 2005 -0700 | |
322 | ||
323 | 4th | |
324 | EOF | |
325 | ||
326 | printf "\n" >> expect-rm-remove | |
327 | cat expect-multiline >> expect-rm-remove | |
328 | ||
329 | test_expect_success 'verify note removal with "git notes remove"' ' | |
330 | git log -4 > output && | |
331 | test_cmp expect-rm-remove output && | |
332 | ! git notes show HEAD^ | |
333 | ' | |
334 | ||
e397421a JH |
335 | cat > expect << EOF |
336 | c18dc024e14f08d18d14eea0d747ff692d66d6a3 1584215f1d29c65e99c6c6848626553fdd07fd75 | |
337 | c9c6af7f78bc47490dbf3e822cf2f3c24d4b9061 268048bfb8a1fb38e703baceb8ab235421bf80c5 | |
338 | EOF | |
339 | ||
340 | test_expect_success 'list notes with "git notes list"' ' | |
341 | git notes list > output && | |
342 | test_cmp expect output | |
343 | ' | |
344 | ||
345 | test_expect_success 'list notes with "git notes"' ' | |
346 | git notes > output && | |
347 | test_cmp expect output | |
348 | ' | |
349 | ||
350 | cat > expect << EOF | |
351 | c18dc024e14f08d18d14eea0d747ff692d66d6a3 | |
352 | EOF | |
353 | ||
354 | test_expect_success 'list specific note with "git notes list <object>"' ' | |
355 | git notes list HEAD^^ > output && | |
356 | test_cmp expect output | |
357 | ' | |
358 | ||
359 | cat > expect << EOF | |
360 | EOF | |
361 | ||
362 | test_expect_success 'listing non-existing notes fails' ' | |
363 | test_must_fail git notes list HEAD > output && | |
364 | test_cmp expect output | |
365 | ' | |
366 | ||
2347fae5 JH |
367 | cat > expect << EOF |
368 | Initial set of notes | |
369 | ||
370 | More notes appended with git notes append | |
371 | EOF | |
372 | ||
373 | test_expect_success 'append to existing note with "git notes append"' ' | |
374 | git notes add -m "Initial set of notes" && | |
375 | git notes append -m "More notes appended with git notes append" && | |
376 | git notes show > output && | |
377 | test_cmp expect output | |
378 | ' | |
379 | ||
380 | test_expect_success 'appending empty string does not change existing note' ' | |
381 | git notes append -m "" && | |
382 | git notes show > output && | |
383 | test_cmp expect output | |
384 | ' | |
385 | ||
386 | test_expect_success 'git notes append == add when there is no existing note' ' | |
387 | git notes remove HEAD && | |
388 | test_must_fail git notes list HEAD && | |
389 | git notes append -m "Initial set of notes | |
390 | ||
391 | More notes appended with git notes append" && | |
392 | git notes show > output && | |
393 | test_cmp expect output | |
394 | ' | |
395 | ||
396 | test_expect_success 'appending empty string to non-existing note does not create note' ' | |
397 | git notes remove HEAD && | |
398 | test_must_fail git notes list HEAD && | |
399 | git notes append -m "" && | |
400 | test_must_fail git notes list HEAD | |
401 | ' | |
402 | ||
cd067d3b JH |
403 | test_expect_success 'create other note on a different notes ref (setup)' ' |
404 | : > a6 && | |
405 | git add a6 && | |
406 | test_tick && | |
407 | git commit -m 6th && | |
7aa4754e | 408 | GIT_NOTES_REF="refs/notes/other" git notes add -m "other note" |
cd067d3b JH |
409 | ' |
410 | ||
411 | cat > expect-other << EOF | |
412 | commit 387a89921c73d7ed72cd94d179c1c7048ca47756 | |
413 | Author: A U Thor <author@example.com> | |
414 | Date: Thu Apr 7 15:18:13 2005 -0700 | |
415 | ||
416 | 6th | |
417 | ||
3b78cdbe JH |
418 | Notes: |
419 | other note | |
420 | EOF | |
421 | ||
422 | cat > expect-not-other << EOF | |
cd067d3b | 423 | commit 387a89921c73d7ed72cd94d179c1c7048ca47756 |
3b78cdbe | 424 | Author: A U Thor <author@example.com> |
cd067d3b | 425 | Date: Thu Apr 7 15:18:13 2005 -0700 |
3b78cdbe | 426 | |
cd067d3b | 427 | 6th |
3b78cdbe JH |
428 | EOF |
429 | ||
430 | test_expect_success 'Do not show note on other ref by default' ' | |
431 | git log -1 > output && | |
432 | test_cmp expect-not-other output | |
433 | ' | |
434 | ||
435 | test_expect_success 'Do show note when ref is given in GIT_NOTES_REF' ' | |
436 | GIT_NOTES_REF="refs/notes/other" git log -1 > output && | |
437 | test_cmp expect-other output | |
438 | ' | |
439 | ||
440 | test_expect_success 'Do show note when ref is given in core.notesRef config' ' | |
441 | git config core.notesRef "refs/notes/other" && | |
442 | git log -1 > output && | |
443 | test_cmp expect-other output | |
444 | ' | |
445 | ||
446 | test_expect_success 'Do not show note when core.notesRef is overridden' ' | |
447 | GIT_NOTES_REF="refs/notes/wrong" git log -1 > output && | |
448 | test_cmp expect-not-other output | |
449 | ' | |
450 | ||
b24bb997 JH |
451 | test_expect_success 'Allow notes on non-commits (trees, blobs, tags)' ' |
452 | echo "Note on a tree" > expect | |
7aa4754e | 453 | git notes add -m "Note on a tree" HEAD: && |
b24bb997 JH |
454 | git notes show HEAD: > actual && |
455 | test_cmp expect actual && | |
456 | echo "Note on a blob" > expect | |
457 | filename=$(git ls-tree --name-only HEAD | head -n1) && | |
7aa4754e | 458 | git notes add -m "Note on a blob" HEAD:$filename && |
b24bb997 JH |
459 | git notes show HEAD:$filename > actual && |
460 | test_cmp expect actual && | |
461 | echo "Note on a tag" > expect | |
462 | git tag -a -m "This is an annotated tag" foobar HEAD^ && | |
7aa4754e | 463 | git notes add -m "Note on a tag" foobar && |
b24bb997 JH |
464 | git notes show foobar > actual && |
465 | test_cmp expect actual | |
466 | ' | |
467 | ||
0691cff7 JH |
468 | cat > expect << EOF |
469 | commit 2ede89468182a62d0bde2583c736089bcf7d7e92 | |
470 | Author: A U Thor <author@example.com> | |
471 | Date: Thu Apr 7 15:19:13 2005 -0700 | |
472 | ||
473 | 7th | |
474 | ||
475 | Notes: | |
476 | other note | |
477 | EOF | |
478 | ||
479 | test_expect_success 'create note from other note with "git notes add -C"' ' | |
480 | : > a7 && | |
481 | git add a7 && | |
482 | test_tick && | |
483 | git commit -m 7th && | |
484 | git notes add -C $(git notes list HEAD^) && | |
485 | git log -1 > actual && | |
486 | test_cmp expect actual && | |
487 | test "$(git notes list HEAD)" = "$(git notes list HEAD^)" | |
488 | ' | |
489 | ||
490 | test_expect_success 'create note from non-existing note with "git notes add -C" fails' ' | |
491 | : > a8 && | |
492 | git add a8 && | |
493 | test_tick && | |
494 | git commit -m 8th && | |
495 | test_must_fail git notes add -C deadbeef && | |
496 | test_must_fail git notes list HEAD | |
497 | ' | |
498 | ||
499 | cat > expect << EOF | |
500 | commit 016e982bad97eacdbda0fcbd7ce5b0ba87c81f1b | |
501 | Author: A U Thor <author@example.com> | |
502 | Date: Thu Apr 7 15:21:13 2005 -0700 | |
503 | ||
504 | 9th | |
505 | ||
506 | Notes: | |
507 | yet another note | |
508 | EOF | |
509 | ||
510 | test_expect_success 'create note from other note with "git notes add -c"' ' | |
511 | : > a9 && | |
512 | git add a9 && | |
513 | test_tick && | |
514 | git commit -m 9th && | |
515 | MSG="yet another note" git notes add -c $(git notes list HEAD^^) && | |
516 | git log -1 > actual && | |
517 | test_cmp expect actual | |
518 | ' | |
519 | ||
520 | test_expect_success 'create note from non-existing note with "git notes add -c" fails' ' | |
521 | : > a10 && | |
522 | git add a10 && | |
523 | test_tick && | |
524 | git commit -m 10th && | |
525 | test_must_fail MSG="yet another note" git notes add -c deadbeef && | |
526 | test_must_fail git notes list HEAD | |
527 | ' | |
528 | ||
529 | cat > expect << EOF | |
530 | commit 016e982bad97eacdbda0fcbd7ce5b0ba87c81f1b | |
531 | Author: A U Thor <author@example.com> | |
532 | Date: Thu Apr 7 15:21:13 2005 -0700 | |
533 | ||
534 | 9th | |
535 | ||
536 | Notes: | |
537 | yet another note | |
538 | $whitespace | |
539 | yet another note | |
540 | EOF | |
541 | ||
542 | test_expect_success 'append to note from other note with "git notes append -C"' ' | |
543 | git notes append -C $(git notes list HEAD^) HEAD^ && | |
544 | git log -1 HEAD^ > actual && | |
545 | test_cmp expect actual | |
546 | ' | |
547 | ||
548 | cat > expect << EOF | |
549 | commit ffed603236bfa3891c49644257a83598afe8ae5a | |
550 | Author: A U Thor <author@example.com> | |
551 | Date: Thu Apr 7 15:22:13 2005 -0700 | |
552 | ||
553 | 10th | |
554 | ||
555 | Notes: | |
556 | other note | |
557 | EOF | |
558 | ||
559 | test_expect_success 'create note from other note with "git notes append -c"' ' | |
560 | MSG="other note" git notes append -c $(git notes list HEAD^) && | |
561 | git log -1 > actual && | |
562 | test_cmp expect actual | |
563 | ' | |
564 | ||
565 | cat > expect << EOF | |
566 | commit ffed603236bfa3891c49644257a83598afe8ae5a | |
567 | Author: A U Thor <author@example.com> | |
568 | Date: Thu Apr 7 15:22:13 2005 -0700 | |
569 | ||
570 | 10th | |
571 | ||
572 | Notes: | |
573 | other note | |
574 | $whitespace | |
575 | yet another note | |
576 | EOF | |
577 | ||
578 | test_expect_success 'append to note from other note with "git notes append -c"' ' | |
579 | MSG="yet another note" git notes append -c $(git notes list HEAD) && | |
580 | git log -1 > actual && | |
581 | test_cmp expect actual | |
582 | ' | |
583 | ||
65d9fb48 | 584 | test_done |