mirror of
https://github.com/git/git.git
synced 2026-03-14 18:59:04 +01:00
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>
This commit is contained in:
committed by
Junio C Hamano
parent
9051638519
commit
466a3a1afd
@@ -145,6 +145,7 @@ integration_tests = [
|
||||
't0611-reftable-httpd.sh',
|
||||
't0612-reftable-jgit-compatibility.sh',
|
||||
't0613-reftable-write-options.sh',
|
||||
't0614-reftable-fsck.sh',
|
||||
't1000-read-tree-m-3way.sh',
|
||||
't1001-read-tree-m-2way.sh',
|
||||
't1002-read-tree-m-u-2way.sh',
|
||||
|
||||
58
t/t0614-reftable-fsck.sh
Executable file
58
t/t0614-reftable-fsck.sh
Executable file
@@ -0,0 +1,58 @@
|
||||
#!/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
|
||||
Reference in New Issue
Block a user