mirror of
https://github.com/git/git.git
synced 2026-01-11 13:23:12 +09:00
In a preceding commit we have extracted generic checks for both direct and symbolic refs that apply for all backends. Wire up those checks for the "reftable" backend. Note that this is done by iterating through all refs manually with the low-level reftable ref iterator. We explicitly don't want to use the higher-level iterator that is exposed to users of the reftable backend as that iterator may swallow for example broken refs. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
103 lines
2.7 KiB
Bash
Executable File
103 lines
2.7 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
test_description='Test reftable backend consistency check'
|
|
|
|
GIT_TEST_DEFAULT_REF_FORMAT=reftable
|
|
export GIT_TEST_DEFAULT_REF_FORMAT
|
|
|
|
. ./test-lib.sh
|
|
|
|
test_expect_success "no errors reported on a well formed repository" '
|
|
test_when_finished "rm -rf repo" &&
|
|
git init repo &&
|
|
(
|
|
cd repo &&
|
|
git commit --allow-empty -m initial &&
|
|
|
|
for i in $(test_seq 20)
|
|
do
|
|
git update-ref refs/heads/branch-$i HEAD || return 1
|
|
done &&
|
|
|
|
# The repository should end up with multiple tables.
|
|
test_line_count -gt 1 .git/reftable/tables.list &&
|
|
|
|
git refs verify 2>err &&
|
|
test_must_be_empty err
|
|
)
|
|
'
|
|
|
|
for TABLE_NAME in "foo-bar-e4d12d59.ref" \
|
|
"0x00000000zzzz-0x00000000zzzz-e4d12d59.ref" \
|
|
"0x000000000001-0x000000000002-e4d12d59.abc" \
|
|
"0x000000000001-0x000000000002-e4d12d59.refabc"; do
|
|
test_expect_success "table name $TABLE_NAME should be checked" '
|
|
test_when_finished "rm -rf repo" &&
|
|
git init repo &&
|
|
(
|
|
cd repo &&
|
|
git commit --allow-empty -m initial &&
|
|
|
|
git refs verify 2>err &&
|
|
test_must_be_empty err &&
|
|
|
|
EXISTING_TABLE=$(head -n1 .git/reftable/tables.list) &&
|
|
mv ".git/reftable/$EXISTING_TABLE" ".git/reftable/$TABLE_NAME" &&
|
|
sed "s/${EXISTING_TABLE}/${TABLE_NAME}/g" .git/reftable/tables.list > tables.list &&
|
|
mv tables.list .git/reftable/tables.list &&
|
|
|
|
git refs verify 2>err &&
|
|
cat >expect <<-EOF &&
|
|
warning: ${TABLE_NAME}: badReftableTableName: invalid reftable table name
|
|
EOF
|
|
test_cmp expect err
|
|
)
|
|
'
|
|
done
|
|
|
|
test_expect_success 'worktree stacks can be verified' '
|
|
test_when_finished "rm -rf repo worktree" &&
|
|
git init repo &&
|
|
test_commit -C repo initial &&
|
|
git -C repo worktree add ../worktree &&
|
|
|
|
git -C worktree refs verify 2>err &&
|
|
test_must_be_empty err &&
|
|
|
|
REFTABLE_DIR=$(git -C worktree rev-parse --git-dir)/reftable &&
|
|
EXISTING_TABLE=$(head -n1 "$REFTABLE_DIR/tables.list") &&
|
|
mv "$REFTABLE_DIR/$EXISTING_TABLE" "$REFTABLE_DIR/broken.ref" &&
|
|
|
|
for d in repo worktree
|
|
do
|
|
echo "broken.ref" >"$REFTABLE_DIR/tables.list" &&
|
|
git -C "$d" refs verify 2>err &&
|
|
cat >expect <<-EOF &&
|
|
warning: broken.ref: badReftableTableName: invalid reftable table name
|
|
EOF
|
|
test_cmp expect err &&
|
|
|
|
echo garbage >"$REFTABLE_DIR/tables.list" &&
|
|
test_must_fail git -C "$d" refs verify 2>err &&
|
|
cat >expect <<-EOF &&
|
|
error: reftable stack for worktree ${SQ}worktree${SQ} is broken
|
|
EOF
|
|
test_cmp expect err || return 1
|
|
|
|
done
|
|
'
|
|
|
|
test_expect_success 'invalid symref gets reported' '
|
|
test_when_finished "rm -rf repo" &&
|
|
git init repo &&
|
|
test_commit -C repo initial &&
|
|
git -C repo symbolic-ref refs/heads/symref garbage &&
|
|
test_must_fail git -C repo refs verify 2>err &&
|
|
cat >expect <<-EOF &&
|
|
error: refs/heads/symref: badReferentName: points to invalid refname ${SQ}garbage${SQ}
|
|
EOF
|
|
test_cmp expect err
|
|
'
|
|
|
|
test_done
|