fsck: verify multi-pack-index

When core.multiPackIndex is true, we may have a multi-pack-index
in our object directory. Add calls to 'git multi-pack-index verify'
at the end of 'git fsck' if so.

Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Derrick Stolee 2018-09-13 11:02:27 -07:00 committed by Junio C Hamano
parent 144d70333e
commit 66ec0390e7
2 changed files with 30 additions and 1 deletions

View File

@ -848,5 +848,23 @@ int cmd_fsck(int argc, const char **argv, const char *prefix)
} }
} }
if (!git_config_get_bool("core.multipackindex", &i) && i) {
struct child_process midx_verify = CHILD_PROCESS_INIT;
const char *midx_argv[] = { "multi-pack-index", "verify", NULL, NULL, NULL };
midx_verify.argv = midx_argv;
midx_verify.git_cmd = 1;
if (run_command(&midx_verify))
errors_found |= ERROR_COMMIT_GRAPH;
prepare_alt_odb(the_repository);
for (alt = the_repository->objects->alt_odb_list; alt; alt = alt->next) {
midx_argv[2] = "--object-dir";
midx_argv[3] = alt->path;
if (run_command(&midx_verify))
errors_found |= ERROR_COMMIT_GRAPH;
}
}
return errors_found; return errors_found;
} }

View File

@ -160,12 +160,17 @@ corrupt_midx_and_verify() {
DATA="${2:-\0}" && DATA="${2:-\0}" &&
OBJDIR=$3 && OBJDIR=$3 &&
GREPSTR="$4" && GREPSTR="$4" &&
COMMAND="$5" &&
if test -z "$COMMAND"
then
COMMAND="git multi-pack-index verify --object-dir=$OBJDIR"
fi &&
FILE=$OBJDIR/pack/multi-pack-index && FILE=$OBJDIR/pack/multi-pack-index &&
chmod a+w $FILE && chmod a+w $FILE &&
test_when_finished mv midx-backup $FILE && test_when_finished mv midx-backup $FILE &&
cp $FILE midx-backup && cp $FILE midx-backup &&
printf "$DATA" | dd of="$FILE" bs=1 seek="$POS" conv=notrunc && printf "$DATA" | dd of="$FILE" bs=1 seek="$POS" conv=notrunc &&
test_must_fail git multi-pack-index verify --object-dir=$OBJDIR 2>test_err && test_must_fail $COMMAND 2>test_err &&
grep -v "^+" test_err >err && grep -v "^+" test_err >err &&
test_i18ngrep "$GREPSTR" err test_i18ngrep "$GREPSTR" err
} }
@ -258,6 +263,12 @@ test_expect_success 'verify incorrect offset' '
"incorrect object offset" "incorrect object offset"
' '
test_expect_success 'git-fsck incorrect offset' '
corrupt_midx_and_verify $MIDX_BYTE_OFFSET "\07" $objdir \
"incorrect object offset" \
"git -c core.multipackindex=true fsck"
'
test_expect_success 'repack removes multi-pack-index' ' test_expect_success 'repack removes multi-pack-index' '
test_path_is_file $objdir/pack/multi-pack-index && test_path_is_file $objdir/pack/multi-pack-index &&
git repack -adf && git repack -adf &&