git svn: make empty directory creation gc-aware
[git] / t / t3301-notes.sh
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
15 VISUAL=./fake_editor.sh
16 export VISUAL
17
18 test_expect_success 'cannot annotate non-existing HEAD' '
19         (MSG=3 && export MSG && test_must_fail git notes edit)
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 &&
35          test_must_fail git notes edit) &&
36         (MSG=2 GIT_NOTES_REF=/ && export MSG GIT_NOTES_REF &&
37          test_must_fail git notes show)
38 '
39
40 test_expect_success 'refusing to edit in refs/heads/' '
41         (MSG=1 GIT_NOTES_REF=refs/heads/bogus &&
42          export MSG GIT_NOTES_REF &&
43          test_must_fail git notes edit)
44 '
45
46 test_expect_success 'refusing to edit in refs/remotes/' '
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 &&
59         MSG=b1 git notes edit &&
60         test ! -f .git/new-notes &&
61         test 1 = $(git ls-tree refs/notes/commits | wc -l) &&
62         test b1 = $(git notes show) &&
63         git show HEAD^ &&
64         test_must_fail git notes show HEAD^
65 '
66
67 cat > expect << EOF
68 commit 268048bfb8a1fb38e703baceb8ab235421bf80c5
69 Author: A U Thor <author@example.com>
70 Date:   Thu Apr 7 15:14:13 2005 -0700
71
72     2nd
73
74 Notes:
75     b1
76 EOF
77
78 test_expect_success 'show notes' '
79         ! (git cat-file commit HEAD | grep b1) &&
80         git log -1 > output &&
81         test_cmp expect output
82 '
83 test_expect_success 'create multi-line notes (setup)' '
84         : > a3 &&
85         git add a3 &&
86         test_tick &&
87         git commit -m 3rd &&
88         MSG="b3
89 c3c3c3c3
90 d3d3d3" git notes edit
91 '
92
93 cat > expect-multiline << EOF
94 commit 1584215f1d29c65e99c6c6848626553fdd07fd75
95 Author: A U Thor <author@example.com>
96 Date:   Thu Apr 7 15:15:13 2005 -0700
97
98     3rd
99
100 Notes:
101     b3
102     c3c3c3c3
103     d3d3d3
104 EOF
105
106 printf "\n" >> expect-multiline
107 cat expect >> expect-multiline
108
109 test_expect_success 'show multi-line notes' '
110         git log -2 > output &&
111         test_cmp expect-multiline output
112 '
113 test_expect_success 'create -m and -F notes (setup)' '
114         : > a4 &&
115         git add a4 &&
116         test_tick &&
117         git commit -m 4th &&
118         echo "xyzzy" > note5 &&
119         git notes edit -m spam -F note5 -m "foo
120 bar
121 baz"
122 '
123
124 whitespace="    "
125 cat > expect-m-and-F << EOF
126 commit 15023535574ded8b1a89052b32673f84cf9582b8
127 Author: A U Thor <author@example.com>
128 Date:   Thu Apr 7 15:16:13 2005 -0700
129
130     4th
131
132 Notes:
133     spam
134 $whitespace
135     xyzzy
136 $whitespace
137     foo
138     bar
139     baz
140 EOF
141
142 printf "\n" >> expect-m-and-F
143 cat expect-multiline >> expect-m-and-F
144
145 test_expect_success 'show -m and -F notes' '
146         git log -3 > output &&
147         test_cmp expect-m-and-F output
148 '
149
150 test_done