]> git.ipfire.org Git - thirdparty/git.git/blame - t/t3800-mktag.sh
mktag tests: test hash-object --literally and unreachable fsck
[thirdparty/git.git] / t / t3800-mktag.sh
CommitLineData
446c6fae
RJ
1#!/bin/sh
2#
3#
4
0cb0e143 5test_description='git mktag: tag object verify test'
446c6fae
RJ
6
7. ./test-lib.sh
8
9###########################################################
10# check the tag.sig file, expecting verify_tag() to fail,
11# and checking that the error message matches the pattern
12# given in the expect.pat file.
13
14check_verify_failure () {
fce3b089
ÆAB
15 subject=$1 &&
16 message=$2 &&
17 shift 2 &&
18
47c0cb1a
ÆAB
19 no_strict= &&
20 fsck_obj_ok= &&
fce3b089
ÆAB
21 no_strict= &&
22 while test $# != 0
23 do
24 case "$1" in
25 --no-strict)
26 no_strict=yes
27 ;;
47c0cb1a
ÆAB
28 --fsck-obj-ok)
29 fsck_obj_ok=yes
30 ;;
fce3b089
ÆAB
31 esac &&
32 shift
33 done &&
34
35 test_expect_success "fail with [--[no-]strict]: $subject" '
36 test_must_fail git mktag <tag.sig 2>err &&
37 if test -z "$no_strict"
06ce7915 38 then
fce3b089
ÆAB
39 test_must_fail git mktag <tag.sig 2>err2 &&
40 test_cmp err err2
6a748c2c
ÆAB
41 else
42 git mktag --no-strict <tag.sig
06ce7915 43 fi
fce3b089 44 '
47c0cb1a
ÆAB
45
46 test_expect_success "setup: $subject" '
47 # Reset any leftover state from the last $subject
48 rm -rf bad-tag &&
49
50 git init --bare bad-tag &&
51 git -C bad-tag hash-object -t tag -w --stdin --literally <tag.sig
52 '
53
54 test_expect_success "hash-object & fsck unreachable: $subject" '
55 if test -n "$fsck_obj_ok"
56 then
57 git -C bad-tag fsck
58 else
59 test_must_fail git -C bad-tag fsck
60 fi
61 '
446c6fae
RJ
62}
63
ca9a1ed9
ÆAB
64test_expect_mktag_success() {
65 test_expect_success "$1" '
66 git hash-object -t tag -w --stdin <tag.sig >expected &&
67 git fsck --strict &&
68
69 git mktag <tag.sig >hash &&
70 test_cmp expected hash &&
71 test_when_finished "git update-ref -d refs/tags/mytag $(cat hash)" &&
72 git update-ref refs/tags/mytag $(cat hash) $(test_oid zero) &&
73 git fsck --strict
74 '
75}
76
446c6fae
RJ
77###########################################################
78# first create a commit, so we have a valid object/type
79# for the tag.
4a45f7dd 80test_expect_success 'setup' '
b5ca549c 81 test_commit A &&
692654dc
ÆAB
82 test_commit B &&
83 head=$(git rev-parse --verify HEAD) &&
84 head_parent=$(git rev-parse --verify HEAD~) &&
85 tree=$(git rev-parse HEAD^{tree}) &&
86 blob=$(git rev-parse --verify HEAD:B.t)
4a45f7dd 87'
446c6fae 88
3f390a36
ÆAB
89test_expect_success 'basic usage' '
90 cat >tag.sig <<-EOF &&
91 object $head
92 type commit
93 tag mytag
94 tagger T A Gger <tagger@example.com> 1206478233 -0500
95 EOF
96 git mktag <tag.sig &&
97 git mktag --end-of-options <tag.sig &&
98 test_expect_code 129 git mktag --unknown-option
99'
100
446c6fae
RJ
101############################################################
102# 1. length check
103
104cat >tag.sig <<EOF
105too short for a tag
106EOF
107
e9b20943 108check_verify_failure 'Tag object length check' \
06ce7915 109 '^error:.* missingObject:' 'strict'
446c6fae
RJ
110
111############################################################
112# 2. object line label check
113
114cat >tag.sig <<EOF
0d35ccb5 115xxxxxx $head
446c6fae
RJ
116type tag
117tag mytag
e0aaf781
BC
118tagger . <> 0 +0000
119
446c6fae
RJ
120EOF
121
acf9de4c 122check_verify_failure '"object" line label check' '^error:.* missingObject:'
446c6fae
RJ
123
124############################################################
0d35ccb5 125# 3. object line hash check
446c6fae
RJ
126
127cat >tag.sig <<EOF
0d35ccb5 128object $(echo $head | tr 0-9a-f z)
446c6fae
RJ
129type tag
130tag mytag
e0aaf781
BC
131tagger . <> 0 +0000
132
446c6fae
RJ
133EOF
134
acf9de4c 135check_verify_failure '"object" line check' '^error:.* badObjectSha1:'
446c6fae
RJ
136
137############################################################
138# 4. type line label check
139
140cat >tag.sig <<EOF
acb49d1c 141object $head
446c6fae
RJ
142xxxx tag
143tag mytag
e0aaf781
BC
144tagger . <> 0 +0000
145
446c6fae
RJ
146EOF
147
acf9de4c 148check_verify_failure '"type" line label check' '^error:.* missingTypeEntry:'
446c6fae
RJ
149
150############################################################
151# 5. type line eol check
152
acb49d1c 153echo "object $head" >tag.sig
2aad957a 154printf "type tagsssssssssssssssssssssssssssssss" >>tag.sig
446c6fae 155
acf9de4c 156check_verify_failure '"type" line eol check' '^error:.* unterminatedHeader:'
446c6fae
RJ
157
158############################################################
159# 6. tag line label check #1
160
161cat >tag.sig <<EOF
acb49d1c 162object $head
446c6fae
RJ
163type tag
164xxx mytag
e0aaf781
BC
165tagger . <> 0 +0000
166
446c6fae
RJ
167EOF
168
e9b20943 169check_verify_failure '"tag" line label check #1' \
acf9de4c 170 '^error:.* missingTagEntry:'
446c6fae
RJ
171
172############################################################
173# 7. tag line label check #2
174
175cat >tag.sig <<EOF
acb49d1c 176object $head
446c6fae
RJ
177type taggggggggggggggggggggggggggggggg
178tag
179EOF
180
e9b20943 181check_verify_failure '"tag" line label check #2' \
acf9de4c 182 '^error:.* badType:'
446c6fae
RJ
183
184############################################################
185# 8. type line type-name length check
186
187cat >tag.sig <<EOF
acb49d1c 188object $head
446c6fae
RJ
189type taggggggggggggggggggggggggggggggg
190tag mytag
191EOF
192
e9b20943 193check_verify_failure '"type" line type-name length check' \
acf9de4c 194 '^error:.* badType:'
446c6fae
RJ
195
196############################################################
30f882c1 197# 9. verify object (hash/type) check
446c6fae
RJ
198
199cat >tag.sig <<EOF
acb49d1c 200object $(test_oid deadbeef)
30f882c1
ÆAB
201type tag
202tag mytag
203tagger . <> 0 +0000
204
205EOF
206
207check_verify_failure 'verify object (hash/type) check -- correct type, nonexisting object' \
47c0cb1a
ÆAB
208 '^fatal: could not read tagged object' \
209 --fsck-obj-ok
30f882c1
ÆAB
210
211cat >tag.sig <<EOF
212object $head
446c6fae
RJ
213type tagggg
214tag mytag
e0aaf781
BC
215tagger . <> 0 +0000
216
446c6fae
RJ
217EOF
218
30f882c1 219check_verify_failure 'verify object (hash/type) check -- made-up type, valid object' \
acf9de4c 220 '^error:.* badType:'
30f882c1
ÆAB
221
222cat >tag.sig <<EOF
223object $(test_oid deadbeef)
224type tagggg
225tag mytag
226tagger . <> 0 +0000
227
228EOF
229
230check_verify_failure 'verify object (hash/type) check -- made-up type, nonexisting object' \
acf9de4c 231 '^error:.* badType:'
446c6fae 232
30f882c1
ÆAB
233cat >tag.sig <<EOF
234object $head
235type tree
236tag mytag
237tagger . <> 0 +0000
238
239EOF
240
692654dc 241check_verify_failure 'verify object (hash/type) check -- mismatched type, valid object' \
47c0cb1a
ÆAB
242 '^fatal: object.*tagged as.*tree.*but is.*commit' \
243 --fsck-obj-ok
692654dc
ÆAB
244
245############################################################
246# 9.5. verify object (hash/type) check -- replacement
247
248test_expect_success 'setup replacement of commit -> commit and tree -> blob' '
249 git replace $head_parent $head &&
250 git replace -f $tree $blob
251'
252
253cat >tag.sig <<EOF
254object $head_parent
255type commit
256tag mytag
257tagger . <> 0 +0000
258
259EOF
260
261test_expect_mktag_success 'tag to a commit replaced by another commit'
262
263cat >tag.sig <<EOF
264object $tree
265type tree
266tag mytag
267tagger . <> 0 +0000
268
269EOF
270
30f882c1 271check_verify_failure 'verify object (hash/type) check -- mismatched type, valid object' \
47c0cb1a
ÆAB
272 '^fatal: object.*tagged as.*tree.*but is.*blob' \
273 --fsck-obj-ok
30f882c1 274
446c6fae
RJ
275############################################################
276# 10. verify tag-name check
277
278cat >tag.sig <<EOF
279object $head
280type commit
281tag my tag
e0aaf781
BC
282tagger . <> 0 +0000
283
446c6fae
RJ
284EOF
285
e9b20943 286check_verify_failure 'verify tag-name check' \
fce3b089 287 '^error:.* badTagName:' \
47c0cb1a
ÆAB
288 --no-strict \
289 --fsck-obj-ok
446c6fae
RJ
290
291############################################################
3dff5379 292# 11. tagger line label check #1
446c6fae
RJ
293
294cat >tag.sig <<EOF
295object $head
296type commit
297tag mytag
e0aaf781
BC
298
299This is filler
446c6fae
RJ
300EOF
301
e9b20943 302check_verify_failure '"tagger" line label check #1' \
fce3b089 303 '^error:.* missingTaggerEntry:' \
47c0cb1a
ÆAB
304 --no-strict \
305 --fsck-obj-ok
446c6fae
RJ
306
307############################################################
3dff5379 308# 12. tagger line label check #2
446c6fae
RJ
309
310cat >tag.sig <<EOF
311object $head
312type commit
313tag mytag
314tagger
e0aaf781
BC
315
316This is filler
446c6fae
RJ
317EOF
318
e9b20943 319check_verify_failure '"tagger" line label check #2' \
fce3b089 320 '^error:.* missingTaggerEntry:' \
47c0cb1a
ÆAB
321 --no-strict \
322 --fsck-obj-ok
446c6fae
RJ
323
324############################################################
acf9de4c 325# 13. allow missing tag author name like fsck
446c6fae
RJ
326
327cat >tag.sig <<EOF
328object $head
329type commit
330tag mytag
e0aaf781
BC
331tagger <> 0 +0000
332
333This is filler
334EOF
335
acf9de4c 336test_expect_mktag_success 'allow missing tag author name'
e0aaf781
BC
337
338############################################################
ba26ab99 339# 14. disallow missing tag author name
e0aaf781
BC
340
341cat >tag.sig <<EOF
342object $head
343type commit
344tag mytag
345tagger T A Gger <
346 > 0 +0000
347
348EOF
349
ba26ab99 350check_verify_failure 'disallow malformed tagger' \
fce3b089 351 '^error:.* badEmail:' \
47c0cb1a
ÆAB
352 --no-strict \
353 --fsck-obj-ok
e0aaf781
BC
354
355############################################################
356# 15. allow empty tag email
357
358cat >tag.sig <<EOF
359object $head
360type commit
361tag mytag
362tagger T A Gger <> 0 +0000
363
364EOF
365
ca9a1ed9 366test_expect_mktag_success 'allow empty tag email'
e0aaf781
BC
367
368############################################################
acf9de4c 369# 16. allow spaces in tag email like fsck
ba26ab99
BC
370
371cat >tag.sig <<EOF
372object $head
373type commit
374tag mytag
375tagger T A Gger <tag ger@example.com> 0 +0000
376
377EOF
378
acf9de4c 379test_expect_mktag_success 'allow spaces in tag email like fsck'
ba26ab99
BC
380
381############################################################
382# 17. disallow missing tag timestamp
e0aaf781 383
74f16b0c 384tr '_' ' ' >tag.sig <<EOF
e0aaf781
BC
385object $head
386type commit
387tag mytag
74f16b0c 388tagger T A Gger <tagger@example.com>__
e0aaf781
BC
389
390EOF
391
ba26ab99 392check_verify_failure 'disallow missing tag timestamp' \
acf9de4c 393 '^error:.* badDate:'
e0aaf781
BC
394
395############################################################
ba26ab99 396# 18. detect invalid tag timestamp1
e0aaf781
BC
397
398cat >tag.sig <<EOF
399object $head
400type commit
401tag mytag
402tagger T A Gger <tagger@example.com> Tue Mar 25 15:47:44 2008
403
404EOF
405
ba26ab99 406check_verify_failure 'detect invalid tag timestamp1' \
acf9de4c 407 '^error:.* badDate:'
e0aaf781
BC
408
409############################################################
ba26ab99
BC
410# 19. detect invalid tag timestamp2
411
412cat >tag.sig <<EOF
413object $head
414type commit
415tag mytag
416tagger T A Gger <tagger@example.com> 2008-03-31T12:20:15-0500
417
418EOF
419
420check_verify_failure 'detect invalid tag timestamp2' \
acf9de4c 421 '^error:.* badDate:'
ba26ab99
BC
422
423############################################################
424# 20. detect invalid tag timezone1
e0aaf781
BC
425
426cat >tag.sig <<EOF
427object $head
428type commit
429tag mytag
430tagger T A Gger <tagger@example.com> 1206478233 GMT
431
432EOF
433
ba26ab99 434check_verify_failure 'detect invalid tag timezone1' \
acf9de4c 435 '^error:.* badTimezone:'
ba26ab99
BC
436
437############################################################
438# 21. detect invalid tag timezone2
439
440cat >tag.sig <<EOF
441object $head
442type commit
443tag mytag
444tagger T A Gger <tagger@example.com> 1206478233 + 30
445
446EOF
447
448check_verify_failure 'detect invalid tag timezone2' \
acf9de4c 449 '^error:.* badTimezone:'
ba26ab99
BC
450
451############################################################
acf9de4c 452# 22. allow invalid tag timezone3 (the maximum is -1200/+1400)
ba26ab99
BC
453
454cat >tag.sig <<EOF
455object $head
456type commit
457tag mytag
458tagger T A Gger <tagger@example.com> 1206478233 -1430
459
460EOF
461
acf9de4c 462test_expect_mktag_success 'allow invalid tag timezone'
e0aaf781
BC
463
464############################################################
ba26ab99 465# 23. detect invalid header entry
e0aaf781
BC
466
467cat >tag.sig <<EOF
468object $head
469type commit
470tag mytag
471tagger T A Gger <tagger@example.com> 1206478233 -0500
472this line should not be here
473
474EOF
475
476check_verify_failure 'detect invalid header entry' \
fce3b089 477 '^error:.* extraHeaderEntry:' \
47c0cb1a
ÆAB
478 --no-strict \
479 --fsck-obj-ok
e0aaf781 480
acfc0133
ÆAB
481test_expect_success 'invalid header entry config & fsck' '
482 test_must_fail git mktag <tag.sig &&
06ce7915
ÆAB
483 git mktag --no-strict <tag.sig &&
484
acfc0133 485 test_must_fail git -c fsck.extraHeaderEntry=error mktag <tag.sig &&
06ce7915
ÆAB
486 test_must_fail git -c fsck.extraHeaderEntry=error mktag --no-strict <tag.sig &&
487
acfc0133 488 test_must_fail git -c fsck.extraHeaderEntry=warn mktag <tag.sig &&
06ce7915
ÆAB
489 git -c fsck.extraHeaderEntry=warn mktag --no-strict <tag.sig &&
490
acfc0133 491 git -c fsck.extraHeaderEntry=ignore mktag <tag.sig &&
06ce7915
ÆAB
492 git -c fsck.extraHeaderEntry=ignore mktag --no-strict <tag.sig &&
493
acfc0133 494 git fsck &&
780aa0a2 495 git -c fsck.extraHeaderEntry=warn fsck 2>err &&
acfc0133 496 grep "warning .*extraHeaderEntry:" err &&
780aa0a2 497 test_must_fail git -c fsck.extraHeaderEntry=error 2>err fsck &&
acfc0133
ÆAB
498 grep "error .* extraHeaderEntry:" err
499'
500
47c95e77
ÆAB
501cat >tag.sig <<EOF
502object $head
503type commit
504tag mytag
505tagger T A Gger <tagger@example.com> 1206478233 -0500
506
507
508this line comes after an extra newline
509EOF
510
ca9a1ed9 511test_expect_mktag_success 'allow extra newlines at start of body'
47c95e77
ÆAB
512
513cat >tag.sig <<EOF
514object $head
515type commit
516tag mytag
517tagger T A Gger <tagger@example.com> 1206478233 -0500
518
519EOF
520
9a1a3a4d 521test_expect_mktag_success 'allow a blank line before an empty body (1)'
47c95e77
ÆAB
522
523cat >tag.sig <<EOF
524object $head
525type commit
526tag mytag
527tagger T A Gger <tagger@example.com> 1206478233 -0500
528EOF
529
9a1a3a4d 530test_expect_mktag_success 'allow no blank line before an empty body (2)'
47c95e77 531
e0aaf781 532############################################################
ba26ab99 533# 24. create valid tag
e0aaf781
BC
534
535cat >tag.sig <<EOF
536object $head
537type commit
538tag mytag
539tagger T A Gger <tagger@example.com> 1206478233 -0500
446c6fae
RJ
540EOF
541
ca9a1ed9 542test_expect_mktag_success 'create valid tag object'
446c6fae
RJ
543
544test_done