Re: [PATCH 2/3] fsck: check index files in all worktrees
- From
Jeff King <peff@peff.net>
- Date
- Feb 24, 2023, 08:45 UTC
- Message-ID
- <Y/h5G+D3jRLXeD16@coredump.intra.peff.net>
- In-Reply-To
- <Y/hw1YVgCYWX2yNK@coredump.intra.peff.net>
On Fri, Feb 24, 2023 at 03:09:58AM -0500, Jeff King wrote:
Show 11 quoted lines
> + for (p = get_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);
> + }I didn't realize that get_worktrees() returns an allocated array, so this is a small leak. I'll squash this in locally:
diff --git a/builtin/fsck.c b/builtin/fsck.c index ddd13cb2b3..c11cb2a95f 100644 --- a/builtin/fsck.c +++ b/builtin/fsck.c @@ -984,12 +984,13 @@ int cmd_fsck(int argc, const char **argv, const char *prefix) } if (keep_cache_objects) { - struct worktree **p; + struct worktree **worktrees, **p; verify_index_checksum = 1; verify_ce_order = 1; - for (p = get_worktrees(); *p; p++) { + worktrees = get_worktrees(); + for (p = worktrees; *p; p++) { struct worktree *wt = *p; struct index_state istate = INDEX_STATE_INIT(the_repository); @@ -1000,7 +1001,7 @@ int cmd_fsck(int argc, const char **argv, const char *prefix) fsck_index(&istate); discard_index(&istate); } - + free_worktrees(worktrees); } check_connectivity(); but I'll hold off for other comments before sending a re-roll. -Peff