Skip to content

Commit

Permalink
fsck: check index files in all worktrees
Browse files Browse the repository at this point in the history
We check the index file for the main worktree, but completely ignore the
index files in other worktrees. These should be checked, too, as they
are part of the repository state (and in particular, errors in those
index files may cause repo-wide operations like "git gc" to complain).

Reported-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
peff authored and gitster committed Feb 24, 2023
1 parent 8840069 commit fb64ca5
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 2 deletions.
18 changes: 16 additions & 2 deletions builtin/fsck.c
Expand Up @@ -984,10 +984,24 @@ int cmd_fsck(int argc, const char **argv, const char *prefix)
}

if (keep_cache_objects) {
struct worktree **worktrees, **p;

verify_index_checksum = 1;
verify_ce_order = 1;
repo_read_index(the_repository);
fsck_index(the_repository->index);

worktrees = get_worktrees();
for (p = worktrees; *p; p++) {
struct worktree *wt = *p;
struct index_state istate =
INDEX_STATE_INIT(the_repository);

if (read_index_from(&istate,
worktree_git_path(wt, "index"),
get_worktree_git_dir(wt)) > 0)
fsck_index(&istate);
discard_index(&istate);
}
free_worktrees(worktrees);
}

check_connectivity();
Expand Down
12 changes: 12 additions & 0 deletions t/t1450-fsck.sh
Expand Up @@ -1023,4 +1023,16 @@ test_expect_success 'fsck error on gitattributes with excessive size' '
test_cmp expected actual
'

test_expect_success 'fsck detects problems in worktree index' '
test_when_finished "git worktree remove -f wt" &&
git worktree add wt &&
echo "this will be removed to break the worktree index" >wt/file &&
git -C wt add file &&
blob=$(git -C wt rev-parse :file) &&
remove_object $blob &&
test_must_fail git fsck
'

test_done

0 comments on commit fb64ca5

Please sign in to comment.