Files
git-mirror/t/t0614-reftable-fsck.sh
Karthik Nayak 466a3a1afd refs/reftable: add fsck check for checking the table name
Add glue code in 'refs/reftable-backend.c' which calls the reftable
library to perform the fsck checks. Here we also map the reftable errors
to Git' fsck errors.

Introduce a check to validate table names for a given reftable stack.
Also add 'badReftableTableName' as a corresponding error within Git. The
reftable specification mentions:

  It suggested to use
  ${min_update_index}-${max_update_index}-${random}.ref as a naming
  convention.

So treat non-conformant file names as warnings.

While adding the fsck header to 'refs/reftable-backend.c', modify the
list to maintain lexicographical ordering.

Signed-off-by: Karthik Nayak <karthik.188@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2025-10-07 09:22:58 -07:00

59 lines
1.5 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 ">" 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_done