Merge branch 'db/vcs-helper' (early part) into next
[git] / t / t4202-log.sh
1 #!/bin/sh
2
3 test_description='git log'
4
5 . ./test-lib.sh
6
7 test_expect_success setup '
8
9         echo one >one &&
10         git add one &&
11         test_tick &&
12         git commit -m initial &&
13
14         echo ichi >one &&
15         git add one &&
16         test_tick &&
17         git commit -m second &&
18
19         git mv one ichi &&
20         test_tick &&
21         git commit -m third &&
22
23         cp ichi ein &&
24         git add ein &&
25         test_tick &&
26         git commit -m fourth &&
27
28         mkdir a &&
29         echo ni >a/two &&
30         git add a/two &&
31         test_tick &&
32         git commit -m fifth  &&
33
34         git rm a/two &&
35         test_tick &&
36         git commit -m sixth
37
38 '
39
40 printf "sixth\nfifth\nfourth\nthird\nsecond\ninitial" > expect
41 test_expect_success 'pretty' '
42
43         git log --pretty="format:%s" > actual &&
44         test_cmp expect actual
45 '
46
47 printf "sixth\nfifth\nfourth\nthird\nsecond\ninitial\n" > expect
48 test_expect_success 'pretty (tformat)' '
49
50         git log --pretty="tformat:%s" > actual &&
51         test_cmp expect actual
52 '
53
54 test_expect_success 'pretty (shortcut)' '
55
56         git log --pretty="%s" > actual &&
57         test_cmp expect actual
58 '
59
60 test_expect_success 'format' '
61
62         git log --format="%s" > actual &&
63         test_cmp expect actual
64 '
65
66 cat > expect << EOF
67 804a787 sixth
68 394ef78 fifth
69 5d31159 fourth
70 2fbe8c0 third
71 f7dab8e second
72 3a2fdcb initial
73 EOF
74 test_expect_success 'oneline' '
75
76         git log --oneline > actual &&
77         test_cmp expect actual
78 '
79
80 test_expect_success 'diff-filter=A' '
81
82         actual=$(git log --pretty="format:%s" --diff-filter=A HEAD) &&
83         expect=$(echo fifth ; echo fourth ; echo third ; echo initial) &&
84         test "$actual" = "$expect" || {
85                 echo Oops
86                 echo "Actual: $actual"
87                 false
88         }
89
90 '
91
92 test_expect_success 'diff-filter=M' '
93
94         actual=$(git log --pretty="format:%s" --diff-filter=M HEAD) &&
95         expect=$(echo second) &&
96         test "$actual" = "$expect" || {
97                 echo Oops
98                 echo "Actual: $actual"
99                 false
100         }
101
102 '
103
104 test_expect_success 'diff-filter=D' '
105
106         actual=$(git log --pretty="format:%s" --diff-filter=D HEAD) &&
107         expect=$(echo sixth ; echo third) &&
108         test "$actual" = "$expect" || {
109                 echo Oops
110                 echo "Actual: $actual"
111                 false
112         }
113
114 '
115
116 test_expect_success 'diff-filter=R' '
117
118         actual=$(git log -M --pretty="format:%s" --diff-filter=R HEAD) &&
119         expect=$(echo third) &&
120         test "$actual" = "$expect" || {
121                 echo Oops
122                 echo "Actual: $actual"
123                 false
124         }
125
126 '
127
128 test_expect_success 'diff-filter=C' '
129
130         actual=$(git log -C -C --pretty="format:%s" --diff-filter=C HEAD) &&
131         expect=$(echo fourth) &&
132         test "$actual" = "$expect" || {
133                 echo Oops
134                 echo "Actual: $actual"
135                 false
136         }
137
138 '
139
140 test_expect_success 'git log --follow' '
141
142         actual=$(git log --follow --pretty="format:%s" ichi) &&
143         expect=$(echo third ; echo second ; echo initial) &&
144         test "$actual" = "$expect" || {
145                 echo Oops
146                 echo "Actual: $actual"
147                 false
148         }
149
150 '
151
152 cat > expect << EOF
153 804a787 sixth
154 394ef78 fifth
155 5d31159 fourth
156 EOF
157 test_expect_success 'git log --no-walk <commits> sorts by commit time' '
158         git log --no-walk --oneline 5d31159 804a787 394ef78 > actual &&
159         test_cmp expect actual
160 '
161
162 cat > expect << EOF
163 5d31159 fourth
164 804a787 sixth
165 394ef78 fifth
166 EOF
167 test_expect_success 'git show <commits> leaves list of commits as given' '
168         git show --oneline -s 5d31159 804a787 394ef78 > actual &&
169         test_cmp expect actual
170 '
171
172 test_expect_success 'setup case sensitivity tests' '
173         echo case >one &&
174         test_tick &&
175         git add one
176         git commit -a -m Second
177 '
178
179 test_expect_success 'log --grep' '
180         echo second >expect &&
181         git log -1 --pretty="tformat:%s" --grep=sec >actual &&
182         test_cmp expect actual
183 '
184
185 test_expect_success 'log -i --grep' '
186         echo Second >expect &&
187         git log -1 --pretty="tformat:%s" -i --grep=sec >actual &&
188         test_cmp expect actual
189 '
190
191 test_expect_success 'log --grep -i' '
192         echo Second >expect &&
193         git log -1 --pretty="tformat:%s" --grep=sec -i >actual &&
194         test_cmp expect actual
195 '
196
197 cat > expect <<EOF
198 * Second
199 * sixth
200 * fifth
201 * fourth
202 * third
203 * second
204 * initial
205 EOF
206
207 test_expect_success 'simple log --graph' '
208         git log --graph --pretty=tformat:%s >actual &&
209         test_cmp expect actual
210 '
211
212 test_expect_success 'set up merge history' '
213         git checkout -b side HEAD~4 &&
214         test_commit side-1 1 1 &&
215         test_commit side-2 2 2 &&
216         git checkout master &&
217         git merge side
218 '
219
220 cat > expect <<\EOF
221 *   Merge branch 'side'
222 |\
223 | * side-2
224 | * side-1
225 * | Second
226 * | sixth
227 * | fifth
228 * | fourth
229 |/
230 * third
231 * second
232 * initial
233 EOF
234
235 test_expect_success 'log --graph with merge' '
236         git log --graph --date-order --pretty=tformat:%s |
237                 sed "s/ *$//" >actual &&
238         test_cmp expect actual
239 '
240
241 cat > expect <<\EOF
242 *   commit master
243 |\  Merge: A B
244 | | Author: A U Thor <author@example.com>
245 | |
246 | |     Merge branch 'side'
247 | |
248 | * commit side
249 | | Author: A U Thor <author@example.com>
250 | |
251 | |     side-2
252 | |
253 | * commit tags/side-1
254 | | Author: A U Thor <author@example.com>
255 | |
256 | |     side-1
257 | |
258 * | commit master~1
259 | | Author: A U Thor <author@example.com>
260 | |
261 | |     Second
262 | |
263 * | commit master~2
264 | | Author: A U Thor <author@example.com>
265 | |
266 | |     sixth
267 | |
268 * | commit master~3
269 | | Author: A U Thor <author@example.com>
270 | |
271 | |     fifth
272 | |
273 * | commit master~4
274 |/  Author: A U Thor <author@example.com>
275 |
276 |       fourth
277 |
278 * commit tags/side-1~1
279 | Author: A U Thor <author@example.com>
280 |
281 |     third
282 |
283 * commit tags/side-1~2
284 | Author: A U Thor <author@example.com>
285 |
286 |     second
287 |
288 * commit tags/side-1~3
289   Author: A U Thor <author@example.com>
290
291       initial
292 EOF
293
294 test_expect_success 'log --graph with full output' '
295         git log --graph --date-order --pretty=short |
296                 git name-rev --name-only --stdin |
297                 sed "s/Merge:.*/Merge: A B/;s/ *$//" >actual &&
298         test_cmp expect actual
299 '
300
301 test_expect_success 'set up more tangled history' '
302         git checkout -b tangle HEAD~6 &&
303         test_commit tangle-a tangle-a a &&
304         git merge master~3 &&
305         git merge side~1 &&
306         git checkout master &&
307         git merge tangle &&
308         git checkout -b reach &&
309         test_commit reach &&
310         git checkout master &&
311         git checkout -b octopus-a &&
312         test_commit octopus-a &&
313         git checkout master &&
314         git checkout -b octopus-b &&
315         test_commit octopus-b &&
316         git checkout master &&
317         test_commit seventh &&
318         git merge octopus-a octopus-b
319         git merge reach
320 '
321
322 cat > expect <<\EOF
323 *   Merge commit 'reach'
324 |\
325 | \
326 |  \
327 *-. \   Merge commit 'octopus-a'; commit 'octopus-b'
328 |\ \ \
329 * | | | seventh
330 | | * | octopus-b
331 | |/ /
332 |/| |
333 | * | octopus-a
334 |/ /
335 | * reach
336 |/
337 *   Merge branch 'tangle'
338 |\
339 | *   Merge branch 'side' (early part) into tangle
340 | |\
341 | * \   Merge branch 'master' (early part) into tangle
342 | |\ \
343 | * | | tangle-a
344 * | | |   Merge branch 'side'
345 |\ \ \ \
346 | * | | | side-2
347 | | |_|/
348 | |/| |
349 | * | | side-1
350 * | | | Second
351 * | | | sixth
352 | |_|/
353 |/| |
354 * | | fifth
355 * | | fourth
356 |/ /
357 * | third
358 |/
359 * second
360 * initial
361 EOF
362
363 test_expect_success 'log --graph with merge' '
364         git log --graph --date-order --pretty=tformat:%s |
365                 sed "s/ *$//" >actual &&
366         test_cmp expect actual
367 '
368
369 test_done
370