Browse Source
The test suite for git-pack-objects(1) is quite huge, and we're about to add more tests that relate to the `--stdin-packs` option. Split out all tests related to this option into a standalone file so that it becomes easier to test the feature in isolation. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>main


2 changed files with 145 additions and 135 deletions
@ -0,0 +1,145 @@
@@ -0,0 +1,145 @@
|
||||
#!/bin/sh |
||||
|
||||
test_description='pack-objects --stdin' |
||||
GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main |
||||
export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME |
||||
|
||||
TEST_PASSES_SANITIZE_LEAK=true |
||||
. ./test-lib.sh |
||||
|
||||
test_expect_success 'setup for --stdin-packs tests' ' |
||||
git init stdin-packs && |
||||
( |
||||
cd stdin-packs && |
||||
|
||||
test_commit A && |
||||
test_commit B && |
||||
test_commit C && |
||||
|
||||
for id in A B C |
||||
do |
||||
git pack-objects .git/objects/pack/pack-$id \ |
||||
--incremental --revs <<-EOF || exit 1 |
||||
refs/tags/$id |
||||
EOF |
||||
done && |
||||
|
||||
ls -la .git/objects/pack |
||||
) |
||||
' |
||||
|
||||
test_expect_success '--stdin-packs with excluded packs' ' |
||||
( |
||||
cd stdin-packs && |
||||
|
||||
PACK_A="$(basename .git/objects/pack/pack-A-*.pack)" && |
||||
PACK_B="$(basename .git/objects/pack/pack-B-*.pack)" && |
||||
PACK_C="$(basename .git/objects/pack/pack-C-*.pack)" && |
||||
|
||||
git pack-objects test --stdin-packs <<-EOF && |
||||
$PACK_A |
||||
^$PACK_B |
||||
$PACK_C |
||||
EOF |
||||
|
||||
( |
||||
git show-index <$(ls .git/objects/pack/pack-A-*.idx) && |
||||
git show-index <$(ls .git/objects/pack/pack-C-*.idx) |
||||
) >expect.raw && |
||||
git show-index <$(ls test-*.idx) >actual.raw && |
||||
|
||||
cut -d" " -f2 <expect.raw | sort >expect && |
||||
cut -d" " -f2 <actual.raw | sort >actual && |
||||
test_cmp expect actual |
||||
) |
||||
' |
||||
|
||||
test_expect_success '--stdin-packs is incompatible with --filter' ' |
||||
( |
||||
cd stdin-packs && |
||||
test_must_fail git pack-objects --stdin-packs --stdout \ |
||||
--filter=blob:none </dev/null 2>err && |
||||
test_i18ngrep "cannot use --filter with --stdin-packs" err |
||||
) |
||||
' |
||||
|
||||
test_expect_success '--stdin-packs is incompatible with --revs' ' |
||||
( |
||||
cd stdin-packs && |
||||
test_must_fail git pack-objects --stdin-packs --revs out \ |
||||
</dev/null 2>err && |
||||
test_i18ngrep "cannot use internal rev list with --stdin-packs" err |
||||
) |
||||
' |
||||
|
||||
test_expect_success '--stdin-packs with loose objects' ' |
||||
( |
||||
cd stdin-packs && |
||||
|
||||
PACK_A="$(basename .git/objects/pack/pack-A-*.pack)" && |
||||
PACK_B="$(basename .git/objects/pack/pack-B-*.pack)" && |
||||
PACK_C="$(basename .git/objects/pack/pack-C-*.pack)" && |
||||
|
||||
test_commit D && # loose |
||||
|
||||
git pack-objects test2 --stdin-packs --unpacked <<-EOF && |
||||
$PACK_A |
||||
^$PACK_B |
||||
$PACK_C |
||||
EOF |
||||
|
||||
( |
||||
git show-index <$(ls .git/objects/pack/pack-A-*.idx) && |
||||
git show-index <$(ls .git/objects/pack/pack-C-*.idx) && |
||||
git rev-list --objects --no-object-names \ |
||||
refs/tags/C..refs/tags/D |
||||
|
||||
) >expect.raw && |
||||
ls -la . && |
||||
git show-index <$(ls test2-*.idx) >actual.raw && |
||||
|
||||
cut -d" " -f2 <expect.raw | sort >expect && |
||||
cut -d" " -f2 <actual.raw | sort >actual && |
||||
test_cmp expect actual |
||||
) |
||||
' |
||||
|
||||
test_expect_success '--stdin-packs with broken links' ' |
||||
( |
||||
cd stdin-packs && |
||||
|
||||
# make an unreachable object with a bogus parent |
||||
git cat-file -p HEAD >commit && |
||||
sed "s/$(git rev-parse HEAD^)/$(test_oid zero)/" <commit | |
||||
git hash-object -w -t commit --stdin >in && |
||||
|
||||
git pack-objects .git/objects/pack/pack-D <in && |
||||
|
||||
PACK_A="$(basename .git/objects/pack/pack-A-*.pack)" && |
||||
PACK_B="$(basename .git/objects/pack/pack-B-*.pack)" && |
||||
PACK_C="$(basename .git/objects/pack/pack-C-*.pack)" && |
||||
PACK_D="$(basename .git/objects/pack/pack-D-*.pack)" && |
||||
|
||||
git pack-objects test3 --stdin-packs --unpacked <<-EOF && |
||||
$PACK_A |
||||
^$PACK_B |
||||
$PACK_C |
||||
$PACK_D |
||||
EOF |
||||
|
||||
( |
||||
git show-index <$(ls .git/objects/pack/pack-A-*.idx) && |
||||
git show-index <$(ls .git/objects/pack/pack-C-*.idx) && |
||||
git show-index <$(ls .git/objects/pack/pack-D-*.idx) && |
||||
git rev-list --objects --no-object-names \ |
||||
refs/tags/C..refs/tags/D |
||||
) >expect.raw && |
||||
git show-index <$(ls test3-*.idx) >actual.raw && |
||||
|
||||
cut -d" " -f2 <expect.raw | sort >expect && |
||||
cut -d" " -f2 <actual.raw | sort >actual && |
||||
test_cmp expect actual |
||||
) |
||||
' |
||||
|
||||
test_done |
Loading…
Reference in new issue