Merge branch 'bc/hash-independent-tests'
Various tests have been updated to make it easier to swap the hash function used for object identification. * bc/hash-independent-tests: t5318: use test_oid for HASH_LEN t1407: make hash size independent t1406: make hash-size independent t1405: make hash size independent t1400: switch hard-coded object ID to variable t1006: make hash size independent t0064: make hash size independent t0002: abstract away SHA-1 specific constants t0000: update tests for SHA-256 t0000: use hash translation table t: add test functions to translate hash-related values
This commit is contained in:
commit
d555663f16
22
t/README
22
t/README
@ -814,6 +814,28 @@ library for your script to use.
|
||||
the symbolic link in the file system and a part that does; then only
|
||||
the latter part need be protected by a SYMLINKS prerequisite (see below).
|
||||
|
||||
- test_oid_init
|
||||
|
||||
This function loads facts and useful object IDs related to the hash
|
||||
algorithm(s) in use from the files in t/oid-info.
|
||||
|
||||
- test_oid_cache
|
||||
|
||||
This function reads per-hash algorithm information from standard
|
||||
input (usually a heredoc) in the format described in
|
||||
t/oid-info/README. This is useful for test-specific values, such as
|
||||
object IDs, which must vary based on the hash algorithm.
|
||||
|
||||
Certain fixed values, such as hash sizes and common placeholder
|
||||
object IDs, can be loaded with test_oid_init (described above).
|
||||
|
||||
- test_oid <key>
|
||||
|
||||
This function looks up a value for the hash algorithm in use, based
|
||||
on the key given. The value must have been loaded using
|
||||
test_oid_init or test_oid_cache. Providing an unknown key is an
|
||||
error.
|
||||
|
||||
Prerequisites
|
||||
-------------
|
||||
|
||||
|
19
t/oid-info/README
Normal file
19
t/oid-info/README
Normal file
@ -0,0 +1,19 @@
|
||||
This directory contains various per-hash values that are used in the testsuite.
|
||||
|
||||
Each file contains lines containing a key-value pair; blank lines and lines
|
||||
starting with `#` are ignored. The key and value are separated by whitespace
|
||||
(specifically, those whitespace in the default `$IFS`). The key consists only
|
||||
of shell identifier characters, and the value consists of a hash algorithm,
|
||||
colon, and value. The hash algorithm also consists only of shell identifier
|
||||
characters; it should match the value in sha1-file.c.
|
||||
|
||||
For example, the following lines map the key "rawsz" to "20" if SHA-1 is in use
|
||||
and to "32" if SHA-256 is in use:
|
||||
|
||||
----
|
||||
rawsz sha1:20
|
||||
rawsz sha256:32
|
||||
----
|
||||
|
||||
The keys and values used here are loaded by `test_oid_init` (see the README file
|
||||
in the "t" directory) and are used by calling `test_oid`.
|
8
t/oid-info/hash-info
Normal file
8
t/oid-info/hash-info
Normal file
@ -0,0 +1,8 @@
|
||||
rawsz sha1:20
|
||||
rawsz sha256:32
|
||||
|
||||
hexsz sha1:40
|
||||
hexsz sha256:64
|
||||
|
||||
zero sha1:0000000000000000000000000000000000000000
|
||||
zero sha256:0000000000000000000000000000000000000000000000000000000000000000
|
29
t/oid-info/oid
Normal file
29
t/oid-info/oid
Normal file
@ -0,0 +1,29 @@
|
||||
# These are some common invalid and partial object IDs used in tests.
|
||||
001 sha1:0000000000000000000000000000000000000001
|
||||
001 sha256:0000000000000000000000000000000000000000000000000000000000000001
|
||||
002 sha1:0000000000000000000000000000000000000002
|
||||
002 sha256:0000000000000000000000000000000000000000000000000000000000000002
|
||||
003 sha1:0000000000000000000000000000000000000003
|
||||
003 sha256:0000000000000000000000000000000000000000000000000000000000000003
|
||||
004 sha1:0000000000000000000000000000000000000004
|
||||
004 sha256:0000000000000000000000000000000000000000000000000000000000000004
|
||||
005 sha1:0000000000000000000000000000000000000005
|
||||
005 sha256:0000000000000000000000000000000000000000000000000000000000000005
|
||||
006 sha1:0000000000000000000000000000000000000006
|
||||
006 sha256:0000000000000000000000000000000000000000000000000000000000000006
|
||||
007 sha1:0000000000000000000000000000000000000007
|
||||
007 sha256:0000000000000000000000000000000000000000000000000000000000000007
|
||||
# All zeros or Fs missing one or two hex segments.
|
||||
zero_1 sha1:000000000000000000000000000000000000000
|
||||
zero_1 sha256:000000000000000000000000000000000000000000000000000000000000000
|
||||
zero_2 sha1:00000000000000000000000000000000000000
|
||||
zero_2 sha256:00000000000000000000000000000000000000000000000000000000000000
|
||||
ff_1 sha1:fffffffffffffffffffffffffffffffffffffff
|
||||
ff_1 sha256:fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
||||
ff_2 sha1:ffffffffffffffffffffffffffffffffffffff
|
||||
ff_2 sha256:ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
||||
# More various invalid OIDs.
|
||||
numeric sha1:0123456789012345678901234567890123456789
|
||||
numeric sha256:0123456789012345678901234567890123456789012345678901234567890123
|
||||
deadbeef sha1:deadbeefdeadbeefdeadbeefdeadbeefdeadbeef
|
||||
deadbeef sha256:deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef
|
213
t/t0000-basic.sh
213
t/t0000-basic.sh
@ -821,9 +821,87 @@ test_expect_success 'tests clean up even on failures' "
|
||||
EOF
|
||||
"
|
||||
|
||||
test_expect_success 'test_oid setup' '
|
||||
test_oid_init
|
||||
'
|
||||
|
||||
test_expect_success 'test_oid provides sane info by default' '
|
||||
test_oid zero >actual &&
|
||||
grep "^00*\$" actual &&
|
||||
rawsz="$(test_oid rawsz)" &&
|
||||
hexsz="$(test_oid hexsz)" &&
|
||||
test "$hexsz" -eq $(wc -c <actual) &&
|
||||
test $(( $rawsz * 2)) -eq "$hexsz"
|
||||
'
|
||||
|
||||
test_expect_success 'test_oid can look up data for SHA-1' '
|
||||
test_when_finished "test_detect_hash" &&
|
||||
test_set_hash sha1 &&
|
||||
test_oid zero >actual &&
|
||||
grep "^00*\$" actual &&
|
||||
rawsz="$(test_oid rawsz)" &&
|
||||
hexsz="$(test_oid hexsz)" &&
|
||||
test $(wc -c <actual) -eq 40 &&
|
||||
test "$rawsz" -eq 20 &&
|
||||
test "$hexsz" -eq 40
|
||||
'
|
||||
|
||||
test_expect_success 'test_oid can look up data for SHA-256' '
|
||||
test_when_finished "test_detect_hash" &&
|
||||
test_set_hash sha256 &&
|
||||
test_oid zero >actual &&
|
||||
grep "^00*\$" actual &&
|
||||
rawsz="$(test_oid rawsz)" &&
|
||||
hexsz="$(test_oid hexsz)" &&
|
||||
test $(wc -c <actual) -eq 64 &&
|
||||
test "$rawsz" -eq 32 &&
|
||||
test "$hexsz" -eq 64
|
||||
'
|
||||
|
||||
################################################################
|
||||
# Basics of the basics
|
||||
|
||||
test_oid_cache <<\EOF
|
||||
path0f sha1:f87290f8eb2cbbea7857214459a0739927eab154
|
||||
path0f sha256:638106af7c38be056f3212cbd7ac65bc1bac74f420ca5a436ff006a9d025d17d
|
||||
|
||||
path0s sha1:15a98433ae33114b085f3eb3bb03b832b3180a01
|
||||
path0s sha256:3a24cc53cf68edddac490bbf94a418a52932130541361f685df685e41dd6c363
|
||||
|
||||
path2f sha1:3feff949ed00a62d9f7af97c15cd8a30595e7ac7
|
||||
path2f sha256:2a7f36571c6fdbaf0e3f62751a0b25a3f4c54d2d1137b3f4af9cb794bb498e5f
|
||||
|
||||
path2s sha1:d8ce161addc5173867a3c3c730924388daedbc38
|
||||
path2s sha256:18fd611b787c2e938ddcc248fabe4d66a150f9364763e9ec133dd01d5bb7c65a
|
||||
|
||||
path2d sha1:58a09c23e2ca152193f2786e06986b7b6712bdbe
|
||||
path2d sha256:00e4b32b96e7e3d65d79112dcbea53238a22715f896933a62b811377e2650c17
|
||||
|
||||
path3f sha1:0aa34cae68d0878578ad119c86ca2b5ed5b28376
|
||||
path3f sha256:09f58616b951bd571b8cb9dc76d372fbb09ab99db2393f5ab3189d26c45099ad
|
||||
|
||||
path3s sha1:8599103969b43aff7e430efea79ca4636466794f
|
||||
path3s sha256:fce1aed087c053306f3f74c32c1a838c662bbc4551a7ac2420f5d6eb061374d0
|
||||
|
||||
path3d sha1:21ae8269cacbe57ae09138dcc3a2887f904d02b3
|
||||
path3d sha256:9b60497be959cb830bf3f0dc82bcc9ad9e925a24e480837ade46b2295e47efe1
|
||||
|
||||
subp3f sha1:00fb5908cb97c2564a9783c0c64087333b3b464f
|
||||
subp3f sha256:a1a9e16998c988453f18313d10375ee1d0ddefe757e710dcae0d66aa1e0c58b3
|
||||
|
||||
subp3s sha1:6649a1ebe9e9f1c553b66f5a6e74136a07ccc57c
|
||||
subp3s sha256:81759d9f5e93c6546ecfcadb560c1ff057314b09f93fe8ec06e2d8610d34ef10
|
||||
|
||||
subp3d sha1:3c5e5399f3a333eddecce7a9b9465b63f65f51e2
|
||||
subp3d sha256:76b4ef482d4fa1c754390344cf3851c7f883b27cf9bc999c6547928c46aeafb7
|
||||
|
||||
root sha1:087704a96baf1c2d1c869a8b084481e121c88b5b
|
||||
root sha256:9481b52abab1b2ffeedbf9de63ce422b929f179c1b98ff7bee5f8f1bc0710751
|
||||
|
||||
simpletree sha1:7bb943559a305bdd6bdee2cef6e5df2413c3d30a
|
||||
simpletree sha256:1710c07a6c86f9a3c7376364df04c47ee39e5a5e221fcdd84b743bc9bb7e2bc5
|
||||
EOF
|
||||
|
||||
# updating a new file without --add should fail.
|
||||
test_expect_success 'git update-index without --add should fail adding' '
|
||||
test_must_fail git update-index should-be-empty
|
||||
@ -839,8 +917,8 @@ test_expect_success 'writing tree out with git write-tree' '
|
||||
'
|
||||
|
||||
# we know the shape and contents of the tree and know the object ID for it.
|
||||
test_expect_success SHA1 'validate object ID of a known tree' '
|
||||
test "$tree" = 7bb943559a305bdd6bdee2cef6e5df2413c3d30a
|
||||
test_expect_success 'validate object ID of a known tree' '
|
||||
test "$tree" = "$(test_oid simpletree)"
|
||||
'
|
||||
|
||||
# Removing paths.
|
||||
@ -882,16 +960,16 @@ test_expect_success 'showing stage with git ls-files --stage' '
|
||||
git ls-files --stage >current
|
||||
'
|
||||
|
||||
test_expect_success SHA1 'validate git ls-files output for a known tree' '
|
||||
cat >expected <<-\EOF &&
|
||||
100644 f87290f8eb2cbbea7857214459a0739927eab154 0 path0
|
||||
120000 15a98433ae33114b085f3eb3bb03b832b3180a01 0 path0sym
|
||||
100644 3feff949ed00a62d9f7af97c15cd8a30595e7ac7 0 path2/file2
|
||||
120000 d8ce161addc5173867a3c3c730924388daedbc38 0 path2/file2sym
|
||||
100644 0aa34cae68d0878578ad119c86ca2b5ed5b28376 0 path3/file3
|
||||
120000 8599103969b43aff7e430efea79ca4636466794f 0 path3/file3sym
|
||||
100644 00fb5908cb97c2564a9783c0c64087333b3b464f 0 path3/subp3/file3
|
||||
120000 6649a1ebe9e9f1c553b66f5a6e74136a07ccc57c 0 path3/subp3/file3sym
|
||||
test_expect_success 'validate git ls-files output for a known tree' '
|
||||
cat >expected <<-EOF &&
|
||||
100644 $(test_oid path0f) 0 path0
|
||||
120000 $(test_oid path0s) 0 path0sym
|
||||
100644 $(test_oid path2f) 0 path2/file2
|
||||
120000 $(test_oid path2s) 0 path2/file2sym
|
||||
100644 $(test_oid path3f) 0 path3/file3
|
||||
120000 $(test_oid path3s) 0 path3/file3sym
|
||||
100644 $(test_oid subp3f) 0 path3/subp3/file3
|
||||
120000 $(test_oid subp3s) 0 path3/subp3/file3sym
|
||||
EOF
|
||||
test_cmp expected current
|
||||
'
|
||||
@ -900,20 +978,20 @@ test_expect_success 'writing tree out with git write-tree' '
|
||||
tree=$(git write-tree)
|
||||
'
|
||||
|
||||
test_expect_success SHA1 'validate object ID for a known tree' '
|
||||
test "$tree" = 087704a96baf1c2d1c869a8b084481e121c88b5b
|
||||
test_expect_success 'validate object ID for a known tree' '
|
||||
test "$tree" = "$(test_oid root)"
|
||||
'
|
||||
|
||||
test_expect_success 'showing tree with git ls-tree' '
|
||||
git ls-tree $tree >current
|
||||
'
|
||||
|
||||
test_expect_success SHA1 'git ls-tree output for a known tree' '
|
||||
cat >expected <<-\EOF &&
|
||||
100644 blob f87290f8eb2cbbea7857214459a0739927eab154 path0
|
||||
120000 blob 15a98433ae33114b085f3eb3bb03b832b3180a01 path0sym
|
||||
040000 tree 58a09c23e2ca152193f2786e06986b7b6712bdbe path2
|
||||
040000 tree 21ae8269cacbe57ae09138dcc3a2887f904d02b3 path3
|
||||
test_expect_success 'git ls-tree output for a known tree' '
|
||||
cat >expected <<-EOF &&
|
||||
100644 blob $(test_oid path0f) path0
|
||||
120000 blob $(test_oid path0s) path0sym
|
||||
040000 tree $(test_oid path2d) path2
|
||||
040000 tree $(test_oid path3d) path3
|
||||
EOF
|
||||
test_cmp expected current
|
||||
'
|
||||
@ -924,16 +1002,16 @@ test_expect_success 'showing tree with git ls-tree -r' '
|
||||
git ls-tree -r $tree >current
|
||||
'
|
||||
|
||||
test_expect_success SHA1 'git ls-tree -r output for a known tree' '
|
||||
cat >expected <<-\EOF &&
|
||||
100644 blob f87290f8eb2cbbea7857214459a0739927eab154 path0
|
||||
120000 blob 15a98433ae33114b085f3eb3bb03b832b3180a01 path0sym
|
||||
100644 blob 3feff949ed00a62d9f7af97c15cd8a30595e7ac7 path2/file2
|
||||
120000 blob d8ce161addc5173867a3c3c730924388daedbc38 path2/file2sym
|
||||
100644 blob 0aa34cae68d0878578ad119c86ca2b5ed5b28376 path3/file3
|
||||
120000 blob 8599103969b43aff7e430efea79ca4636466794f path3/file3sym
|
||||
100644 blob 00fb5908cb97c2564a9783c0c64087333b3b464f path3/subp3/file3
|
||||
120000 blob 6649a1ebe9e9f1c553b66f5a6e74136a07ccc57c path3/subp3/file3sym
|
||||
test_expect_success 'git ls-tree -r output for a known tree' '
|
||||
cat >expected <<-EOF &&
|
||||
100644 blob $(test_oid path0f) path0
|
||||
120000 blob $(test_oid path0s) path0sym
|
||||
100644 blob $(test_oid path2f) path2/file2
|
||||
120000 blob $(test_oid path2s) path2/file2sym
|
||||
100644 blob $(test_oid path3f) path3/file3
|
||||
120000 blob $(test_oid path3s) path3/file3sym
|
||||
100644 blob $(test_oid subp3f) path3/subp3/file3
|
||||
120000 blob $(test_oid subp3s) path3/subp3/file3sym
|
||||
EOF
|
||||
test_cmp expected current
|
||||
'
|
||||
@ -943,19 +1021,19 @@ test_expect_success 'showing tree with git ls-tree -r -t' '
|
||||
git ls-tree -r -t $tree >current
|
||||
'
|
||||
|
||||
test_expect_success SHA1 'git ls-tree -r output for a known tree' '
|
||||
cat >expected <<-\EOF &&
|
||||
100644 blob f87290f8eb2cbbea7857214459a0739927eab154 path0
|
||||
120000 blob 15a98433ae33114b085f3eb3bb03b832b3180a01 path0sym
|
||||
040000 tree 58a09c23e2ca152193f2786e06986b7b6712bdbe path2
|
||||
100644 blob 3feff949ed00a62d9f7af97c15cd8a30595e7ac7 path2/file2
|
||||
120000 blob d8ce161addc5173867a3c3c730924388daedbc38 path2/file2sym
|
||||
040000 tree 21ae8269cacbe57ae09138dcc3a2887f904d02b3 path3
|
||||
100644 blob 0aa34cae68d0878578ad119c86ca2b5ed5b28376 path3/file3
|
||||
120000 blob 8599103969b43aff7e430efea79ca4636466794f path3/file3sym
|
||||
040000 tree 3c5e5399f3a333eddecce7a9b9465b63f65f51e2 path3/subp3
|
||||
100644 blob 00fb5908cb97c2564a9783c0c64087333b3b464f path3/subp3/file3
|
||||
120000 blob 6649a1ebe9e9f1c553b66f5a6e74136a07ccc57c path3/subp3/file3sym
|
||||
test_expect_success 'git ls-tree -r output for a known tree' '
|
||||
cat >expected <<-EOF &&
|
||||
100644 blob $(test_oid path0f) path0
|
||||
120000 blob $(test_oid path0s) path0sym
|
||||
040000 tree $(test_oid path2d) path2
|
||||
100644 blob $(test_oid path2f) path2/file2
|
||||
120000 blob $(test_oid path2s) path2/file2sym
|
||||
040000 tree $(test_oid path3d) path3
|
||||
100644 blob $(test_oid path3f) path3/file3
|
||||
120000 blob $(test_oid path3s) path3/file3sym
|
||||
040000 tree $(test_oid subp3d) path3/subp3
|
||||
100644 blob $(test_oid subp3f) path3/subp3/file3
|
||||
120000 blob $(test_oid subp3s) path3/subp3/file3sym
|
||||
EOF
|
||||
test_cmp expected current
|
||||
'
|
||||
@ -964,26 +1042,27 @@ test_expect_success 'writing partial tree out with git write-tree --prefix' '
|
||||
ptree=$(git write-tree --prefix=path3)
|
||||
'
|
||||
|
||||
test_expect_success SHA1 'validate object ID for a known tree' '
|
||||
test "$ptree" = 21ae8269cacbe57ae09138dcc3a2887f904d02b3
|
||||
test_expect_success 'validate object ID for a known tree' '
|
||||
test "$ptree" = $(test_oid path3d)
|
||||
'
|
||||
|
||||
test_expect_success 'writing partial tree out with git write-tree --prefix' '
|
||||
ptree=$(git write-tree --prefix=path3/subp3)
|
||||
'
|
||||
|
||||
test_expect_success SHA1 'validate object ID for a known tree' '
|
||||
test "$ptree" = 3c5e5399f3a333eddecce7a9b9465b63f65f51e2
|
||||
test_expect_success 'validate object ID for a known tree' '
|
||||
test "$ptree" = $(test_oid subp3d)
|
||||
'
|
||||
|
||||
test_expect_success 'put invalid objects into the index' '
|
||||
rm -f .git/index &&
|
||||
cat >badobjects <<-\EOF &&
|
||||
100644 blob 1000000000000000000000000000000000000000 dir/file1
|
||||
100644 blob 2000000000000000000000000000000000000000 dir/file2
|
||||
100644 blob 3000000000000000000000000000000000000000 dir/file3
|
||||
100644 blob 4000000000000000000000000000000000000000 dir/file4
|
||||
100644 blob 5000000000000000000000000000000000000000 dir/file5
|
||||
suffix=$(echo $ZERO_OID | sed -e "s/^.//") &&
|
||||
cat >badobjects <<-EOF &&
|
||||
100644 blob $(test_oid 001) dir/file1
|
||||
100644 blob $(test_oid 002) dir/file2
|
||||
100644 blob $(test_oid 003) dir/file3
|
||||
100644 blob $(test_oid 004) dir/file4
|
||||
100644 blob $(test_oid 005) dir/file5
|
||||
EOF
|
||||
git update-index --index-info <badobjects
|
||||
'
|
||||
@ -1006,16 +1085,16 @@ test_expect_success 'git read-tree followed by write-tree should be idempotent'
|
||||
test "$newtree" = "$tree"
|
||||
'
|
||||
|
||||
test_expect_success SHA1 'validate git diff-files output for a know cache/work tree state' '
|
||||
cat >expected <<\EOF &&
|
||||
:100644 100644 f87290f8eb2cbbea7857214459a0739927eab154 0000000000000000000000000000000000000000 M path0
|
||||
:120000 120000 15a98433ae33114b085f3eb3bb03b832b3180a01 0000000000000000000000000000000000000000 M path0sym
|
||||
:100644 100644 3feff949ed00a62d9f7af97c15cd8a30595e7ac7 0000000000000000000000000000000000000000 M path2/file2
|
||||
:120000 120000 d8ce161addc5173867a3c3c730924388daedbc38 0000000000000000000000000000000000000000 M path2/file2sym
|
||||
:100644 100644 0aa34cae68d0878578ad119c86ca2b5ed5b28376 0000000000000000000000000000000000000000 M path3/file3
|
||||
:120000 120000 8599103969b43aff7e430efea79ca4636466794f 0000000000000000000000000000000000000000 M path3/file3sym
|
||||
:100644 100644 00fb5908cb97c2564a9783c0c64087333b3b464f 0000000000000000000000000000000000000000 M path3/subp3/file3
|
||||
:120000 120000 6649a1ebe9e9f1c553b66f5a6e74136a07ccc57c 0000000000000000000000000000000000000000 M path3/subp3/file3sym
|
||||
test_expect_success 'validate git diff-files output for a know cache/work tree state' '
|
||||
cat >expected <<EOF &&
|
||||
:100644 100644 $(test_oid path0f) $ZERO_OID M path0
|
||||
:120000 120000 $(test_oid path0s) $ZERO_OID M path0sym
|
||||
:100644 100644 $(test_oid path2f) $ZERO_OID M path2/file2
|
||||
:120000 120000 $(test_oid path2s) $ZERO_OID M path2/file2sym
|
||||
:100644 100644 $(test_oid path3f) $ZERO_OID M path3/file3
|
||||
:120000 120000 $(test_oid path3s) $ZERO_OID M path3/file3sym
|
||||
:100644 100644 $(test_oid subp3f) $ZERO_OID M path3/subp3/file3
|
||||
:120000 120000 $(test_oid subp3s) $ZERO_OID M path3/subp3/file3sym
|
||||
EOF
|
||||
git diff-files >current &&
|
||||
test_cmp current expected
|
||||
@ -1031,23 +1110,23 @@ test_expect_success 'no diff after checkout and git update-index --refresh' '
|
||||
'
|
||||
|
||||
################################################################
|
||||
P=087704a96baf1c2d1c869a8b084481e121c88b5b
|
||||
P=$(test_oid root)
|
||||
|
||||
test_expect_success SHA1 'git commit-tree records the correct tree in a commit' '
|
||||
test_expect_success 'git commit-tree records the correct tree in a commit' '
|
||||
commit0=$(echo NO | git commit-tree $P) &&
|
||||
tree=$(git show --pretty=raw $commit0 |
|
||||
sed -n -e "s/^tree //p" -e "/^author /q") &&
|
||||
test "z$tree" = "z$P"
|
||||
'
|
||||
|
||||
test_expect_success SHA1 'git commit-tree records the correct parent in a commit' '
|
||||
test_expect_success 'git commit-tree records the correct parent in a commit' '
|
||||
commit1=$(echo NO | git commit-tree $P -p $commit0) &&
|
||||
parent=$(git show --pretty=raw $commit1 |
|
||||
sed -n -e "s/^parent //p" -e "/^author /q") &&
|
||||
test "z$commit0" = "z$parent"
|
||||
'
|
||||
|
||||
test_expect_success SHA1 'git commit-tree omits duplicated parent in a commit' '
|
||||
test_expect_success 'git commit-tree omits duplicated parent in a commit' '
|
||||
commit2=$(echo NO | git commit-tree $P -p $commit0 -p $commit0) &&
|
||||
parent=$(git show --pretty=raw $commit2 |
|
||||
sed -n -e "s/^parent //p" -e "/^author /q" |
|
||||
|
@ -92,11 +92,12 @@ test_expect_success 'enter_repo non-strict mode' '
|
||||
mv .git .realgit &&
|
||||
echo "gitdir: .realgit" >.git
|
||||
) &&
|
||||
head=$(git -C enter_repo rev-parse HEAD) &&
|
||||
git ls-remote enter_repo >actual &&
|
||||
cat >expected <<-\EOF &&
|
||||
946e985ab20de757ca5b872b16d64e92ff3803a9 HEAD
|
||||
946e985ab20de757ca5b872b16d64e92ff3803a9 refs/heads/master
|
||||
946e985ab20de757ca5b872b16d64e92ff3803a9 refs/tags/foo
|
||||
cat >expected <<-EOF &&
|
||||
$head HEAD
|
||||
$head refs/heads/master
|
||||
$head refs/tags/foo
|
||||
EOF
|
||||
test_cmp expected actual
|
||||
'
|
||||
@ -106,21 +107,23 @@ test_expect_success 'enter_repo linked checkout' '
|
||||
cd enter_repo &&
|
||||
git worktree add ../foo refs/tags/foo
|
||||
) &&
|
||||
head=$(git -C enter_repo rev-parse HEAD) &&
|
||||
git ls-remote foo >actual &&
|
||||
cat >expected <<-\EOF &&
|
||||
946e985ab20de757ca5b872b16d64e92ff3803a9 HEAD
|
||||
946e985ab20de757ca5b872b16d64e92ff3803a9 refs/heads/master
|
||||
946e985ab20de757ca5b872b16d64e92ff3803a9 refs/tags/foo
|
||||
cat >expected <<-EOF &&
|
||||
$head HEAD
|
||||
$head refs/heads/master
|
||||
$head refs/tags/foo
|
||||
EOF
|
||||
test_cmp expected actual
|
||||
'
|
||||
|
||||
test_expect_success 'enter_repo strict mode' '
|
||||
head=$(git -C enter_repo rev-parse HEAD) &&
|
||||
git ls-remote --upload-pack="git upload-pack --strict" foo/.git >actual &&
|
||||
cat >expected <<-\EOF &&
|
||||
946e985ab20de757ca5b872b16d64e92ff3803a9 HEAD
|
||||
946e985ab20de757ca5b872b16d64e92ff3803a9 refs/heads/master
|
||||
946e985ab20de757ca5b872b16d64e92ff3803a9 refs/tags/foo
|
||||
cat >expected <<-EOF &&
|
||||
$head HEAD
|
||||
$head refs/heads/master
|
||||
$head refs/tags/foo
|
||||
EOF
|
||||
test_cmp expected actual
|
||||
'
|
||||
|
@ -3,30 +3,30 @@
|
||||
test_description='basic tests for the SHA1 array implementation'
|
||||
. ./test-lib.sh
|
||||
|
||||
echo20 () {
|
||||
echoid () {
|
||||
prefix="${1:+$1 }"
|
||||
shift
|
||||
while test $# -gt 0
|
||||
do
|
||||
echo "$prefix$1$1$1$1$1$1$1$1$1$1$1$1$1$1$1$1$1$1$1$1"
|
||||
echo "$prefix$ZERO_OID" | sed -e "s/00/$1/g"
|
||||
shift
|
||||
done
|
||||
}
|
||||
|
||||
test_expect_success 'ordered enumeration' '
|
||||
echo20 "" 44 55 88 aa >expect &&
|
||||
echoid "" 44 55 88 aa >expect &&
|
||||
{
|
||||
echo20 append 88 44 aa 55 &&
|
||||
echoid append 88 44 aa 55 &&
|
||||
echo for_each_unique
|
||||
} | test-tool sha1-array >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 'ordered enumeration with duplicate suppression' '
|
||||
echo20 "" 44 55 88 aa >expect &&
|
||||
echoid "" 44 55 88 aa >expect &&
|
||||
{
|
||||
echo20 append 88 44 aa 55 &&
|
||||
echo20 append 88 44 aa 55 &&
|
||||
echoid append 88 44 aa 55 &&
|
||||
echoid append 88 44 aa 55 &&
|
||||
echo for_each_unique
|
||||
} | test-tool sha1-array >actual &&
|
||||
test_cmp expect actual
|
||||
@ -34,8 +34,8 @@ test_expect_success 'ordered enumeration with duplicate suppression' '
|
||||
|
||||
test_expect_success 'lookup' '
|
||||
{
|
||||
echo20 append 88 44 aa 55 &&
|
||||
echo20 lookup 55
|
||||
echoid append 88 44 aa 55 &&
|
||||
echoid lookup 55
|
||||
} | test-tool sha1-array >actual &&
|
||||
n=$(cat actual) &&
|
||||
test "$n" -eq 1
|
||||
@ -43,8 +43,8 @@ test_expect_success 'lookup' '
|
||||
|
||||
test_expect_success 'lookup non-existing entry' '
|
||||
{
|
||||
echo20 append 88 44 aa 55 &&
|
||||
echo20 lookup 33
|
||||
echoid append 88 44 aa 55 &&
|
||||
echoid lookup 33
|
||||
} | test-tool sha1-array >actual &&
|
||||
n=$(cat actual) &&
|
||||
test "$n" -lt 0
|
||||
@ -52,9 +52,9 @@ test_expect_success 'lookup non-existing entry' '
|
||||
|
||||
test_expect_success 'lookup with duplicates' '
|
||||
{
|
||||
echo20 append 88 44 aa 55 &&
|
||||
echo20 append 88 44 aa 55 &&
|
||||
echo20 lookup 55
|
||||
echoid append 88 44 aa 55 &&
|
||||
echoid append 88 44 aa 55 &&
|
||||
echoid lookup 55
|
||||
} | test-tool sha1-array >actual &&
|
||||
n=$(cat actual) &&
|
||||
test "$n" -ge 2 &&
|
||||
@ -63,19 +63,24 @@ test_expect_success 'lookup with duplicates' '
|
||||
|
||||
test_expect_success 'lookup non-existing entry with duplicates' '
|
||||
{
|
||||
echo20 append 88 44 aa 55 &&
|
||||
echo20 append 88 44 aa 55 &&
|
||||
echo20 lookup 66
|
||||
echoid append 88 44 aa 55 &&
|
||||
echoid append 88 44 aa 55 &&
|
||||
echoid lookup 66
|
||||
} | test-tool sha1-array >actual &&
|
||||
n=$(cat actual) &&
|
||||
test "$n" -lt 0
|
||||
'
|
||||
|
||||
test_expect_success 'lookup with almost duplicate values' '
|
||||
# n-1 5s
|
||||
root=$(echoid "" 55) &&
|
||||
root=${root%5} &&
|
||||
{
|
||||
echo "append 5555555555555555555555555555555555555555" &&
|
||||
echo "append 555555555555555555555555555555555555555f" &&
|
||||
echo20 lookup 55
|
||||
id1="${root}5" &&
|
||||
id2="${root}f" &&
|
||||
echo "append $id1" &&
|
||||
echo "append $id2" &&
|
||||
echoid lookup 55
|
||||
} | test-tool sha1-array >actual &&
|
||||
n=$(cat actual) &&
|
||||
test "$n" -eq 0
|
||||
@ -83,8 +88,8 @@ test_expect_success 'lookup with almost duplicate values' '
|
||||
|
||||
test_expect_success 'lookup with single duplicate value' '
|
||||
{
|
||||
echo20 append 55 55 &&
|
||||
echo20 lookup 55
|
||||
echoid append 55 55 &&
|
||||
echoid lookup 55
|
||||
} | test-tool sha1-array >actual &&
|
||||
n=$(cat actual) &&
|
||||
test "$n" -ge 0 &&
|
||||
|
@ -140,15 +140,17 @@ test_expect_success '--batch-check without %(rest) considers whole line' '
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_oid_init
|
||||
|
||||
tree_sha1=$(git write-tree)
|
||||
tree_size=33
|
||||
tree_size=$(($(test_oid rawsz) + 13))
|
||||
tree_pretty_content="100644 blob $hello_sha1 hello"
|
||||
|
||||
run_tests 'tree' $tree_sha1 $tree_size "" "$tree_pretty_content"
|
||||
|
||||
commit_message="Initial commit"
|
||||
commit_sha1=$(echo_without_newline "$commit_message" | git commit-tree $tree_sha1)
|
||||
commit_size=177
|
||||
commit_size=$(($(test_oid hexsz) + 137))
|
||||
commit_content="tree $tree_sha1
|
||||
author $GIT_AUTHOR_NAME <$GIT_AUTHOR_EMAIL> 0000000000 +0000
|
||||
committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> 0000000000 +0000
|
||||
|
@ -346,7 +346,7 @@ test_expect_success "verifying $m's log (logged by config)" '
|
||||
|
||||
git update-ref $m $D
|
||||
cat >.git/logs/$m <<EOF
|
||||
0000000000000000000000000000000000000000 $C $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> 1117150320 -0500
|
||||
$Z $C $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> 1117150320 -0500
|
||||
$C $A $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> 1117150350 -0500
|
||||
$A $B $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> 1117150380 -0500
|
||||
$F $Z $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> 1117150680 -0500
|
||||
|
@ -54,7 +54,7 @@ test_expect_success 'for_each_ref(refs/heads/)' '
|
||||
'
|
||||
|
||||
test_expect_success 'for_each_ref() is sorted' '
|
||||
$RUN for-each-ref refs/heads/ | cut -c 42- >actual &&
|
||||
$RUN for-each-ref refs/heads/ | cut -d" " -f 2- >actual &&
|
||||
sort actual > expected &&
|
||||
test_cmp expected actual
|
||||
'
|
||||
@ -71,7 +71,7 @@ test_expect_success 'verify_ref(new-master)' '
|
||||
'
|
||||
|
||||
test_expect_success 'for_each_reflog()' '
|
||||
$RUN for-each-reflog | sort -k2 | cut -c 42- >actual &&
|
||||
$RUN for-each-reflog | sort -k2 | cut -d" " -f 2- >actual &&
|
||||
cat >expected <<-\EOF &&
|
||||
HEAD 0x1
|
||||
refs/heads/master 0x0
|
||||
|
@ -39,7 +39,7 @@ test_expect_success 'rename_refs() not allowed' '
|
||||
'
|
||||
|
||||
test_expect_success 'for_each_ref(refs/heads/)' '
|
||||
$RUN for-each-ref refs/heads/ | cut -c 42- >actual &&
|
||||
$RUN for-each-ref refs/heads/ | cut -d" " -f 2- >actual &&
|
||||
cat >expected <<-\EOF &&
|
||||
master 0x0
|
||||
new-master 0x0
|
||||
@ -48,7 +48,7 @@ test_expect_success 'for_each_ref(refs/heads/)' '
|
||||
'
|
||||
|
||||
test_expect_success 'for_each_ref() is sorted' '
|
||||
$RUN for-each-ref refs/heads/ | cut -c 42- >actual &&
|
||||
$RUN for-each-ref refs/heads/ | cut -d" " -f 2- >actual &&
|
||||
sort actual > expected &&
|
||||
test_cmp expected actual
|
||||
'
|
||||
@ -65,7 +65,7 @@ test_expect_success 'verify_ref(new-master)' '
|
||||
'
|
||||
|
||||
test_expect_success 'for_each_reflog()' '
|
||||
$RUN for-each-reflog | sort | cut -c 42- >actual &&
|
||||
$RUN for-each-reflog | sort | cut -d" " -f 2- >actual &&
|
||||
cat >expected <<-\EOF &&
|
||||
HEAD 0x1
|
||||
refs/heads/master 0x0
|
||||
|
@ -58,7 +58,7 @@ test_expect_success 'for_each_reflog()' '
|
||||
mkdir -p .git/worktrees/wt/logs/refs/bisect &&
|
||||
echo $ZERO_OID > .git/worktrees/wt/logs/refs/bisect/wt-random &&
|
||||
|
||||
$RWT for-each-reflog | cut -c 42- | sort >actual &&
|
||||
$RWT for-each-reflog | cut -d" " -f 2- | sort >actual &&
|
||||
cat >expected <<-\EOF &&
|
||||
HEAD 0x1
|
||||
PSEUDO-WT 0x0
|
||||
@ -68,7 +68,7 @@ test_expect_success 'for_each_reflog()' '
|
||||
EOF
|
||||
test_cmp expected actual &&
|
||||
|
||||
$RMAIN for-each-reflog | cut -c 42- | sort >actual &&
|
||||
$RMAIN for-each-reflog | cut -d" " -f 2- | sort >actual &&
|
||||
cat >expected <<-\EOF &&
|
||||
HEAD 0x1
|
||||
PSEUDO-MAIN 0x0
|
||||
|
@ -8,7 +8,8 @@ test_expect_success 'setup full repo' '
|
||||
cd "$TRASH_DIRECTORY/full" &&
|
||||
git init &&
|
||||
git config core.commitGraph true &&
|
||||
objdir=".git/objects"
|
||||
objdir=".git/objects" &&
|
||||
test_oid_init
|
||||
'
|
||||
|
||||
test_expect_success 'verify graph with no graph file' '
|
||||
@ -273,7 +274,7 @@ test_expect_success 'git commit-graph verify' '
|
||||
|
||||
NUM_COMMITS=9
|
||||
NUM_OCTOPUS_EDGES=2
|
||||
HASH_LEN=20
|
||||
HASH_LEN="$(test_oid rawsz)"
|
||||
GRAPH_BYTE_VERSION=4
|
||||
GRAPH_BYTE_HASH=5
|
||||
GRAPH_BYTE_CHUNK_COUNT=6
|
||||
|
@ -1157,3 +1157,72 @@ depacketize () {
|
||||
}
|
||||
'
|
||||
}
|
||||
|
||||
# Set the hash algorithm in use to $1. Only useful when testing the testsuite.
|
||||
test_set_hash () {
|
||||
test_hash_algo="$1"
|
||||
}
|
||||
|
||||
# Detect the hash algorithm in use.
|
||||
test_detect_hash () {
|
||||
# Currently we only support SHA-1, but in the future this function will
|
||||
# actually detect the algorithm in use.
|
||||
test_hash_algo='sha1'
|
||||
}
|
||||
|
||||
# Load common hash metadata and common placeholder object IDs for use with
|
||||
# test_oid.
|
||||
test_oid_init () {
|
||||
test -n "$test_hash_algo" || test_detect_hash &&
|
||||
test_oid_cache <"$TEST_DIRECTORY/oid-info/hash-info" &&
|
||||
test_oid_cache <"$TEST_DIRECTORY/oid-info/oid"
|
||||
}
|
||||
|
||||
# Load key-value pairs from stdin suitable for use with test_oid. Blank lines
|
||||
# and lines starting with "#" are ignored. Keys must be shell identifier
|
||||
# characters.
|
||||
#
|
||||
# Examples:
|
||||
# rawsz sha1:20
|
||||
# rawsz sha256:32
|
||||
test_oid_cache () {
|
||||
local tag rest k v &&
|
||||
|
||||
{ test -n "$test_hash_algo" || test_detect_hash; } &&
|
||||
while read tag rest
|
||||
do
|
||||
case $tag in
|
||||
\#*)
|
||||
continue;;
|
||||
?*)
|
||||
# non-empty
|
||||
;;
|
||||
*)
|
||||
# blank line
|
||||
continue;;
|
||||
esac &&
|
||||
|
||||
k="${rest%:*}" &&
|
||||
v="${rest#*:}" &&
|
||||
|
||||
if ! expr "$k" : '[a-z0-9][a-z0-9]*$' >/dev/null
|
||||
then
|
||||
error 'bug in the test script: bad hash algorithm'
|
||||
fi &&
|
||||
eval "test_oid_${k}_$tag=\"\$v\""
|
||||
done
|
||||
}
|
||||
|
||||
# Look up a per-hash value based on a key ($1). The value must have been loaded
|
||||
# by test_oid_init or test_oid_cache.
|
||||
test_oid () {
|
||||
local var="test_oid_${test_hash_algo}_$1" &&
|
||||
|
||||
# If the variable is unset, we must be missing an entry for this
|
||||
# key-hash pair, so exit with an error.
|
||||
if eval "test -z \"\${$var+set}\""
|
||||
then
|
||||
error "bug in the test script: undefined key '$1'" >&2
|
||||
fi &&
|
||||
eval "printf '%s' \"\${$var}\""
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user