worktree: add skeleton "repair" command

Worktree administrative files can become corrupted or outdated due to
external factors. Although, it is often possible to recover from such
situations by hand-tweaking these files, doing so requires intimate
knowledge of worktree internals. While information necessary to make
such repairs manually can be obtained from git-worktree.txt and
gitrepository-layout.txt, we can assist users more directly by teaching
git-worktree how to repair its administrative files itself (at least to
some extent). Therefore, add a "git worktree repair" command which
attempts to correct common problems which may arise due to factors
beyond Git's control.

At this stage, the "repair" command is a mere skeleton; subsequent
commits will flesh out the functionality.

Signed-off-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Eric Sunshine
2020-08-27 04:21:25 -04:00
committed by Junio C Hamano
parent e9b77c84a0
commit e8e1ff24c5
3 changed files with 32 additions and 0 deletions

View File

@ -1030,6 +1030,19 @@ static int remove_worktree(int ac, const char **av, const char *prefix)
return ret;
}
static int repair(int ac, const char **av, const char *prefix)
{
struct option options[] = {
OPT_END()
};
int rc = 0;
ac = parse_options(ac, av, prefix, options, worktree_usage, 0);
if (ac)
usage_with_options(worktree_usage, options);
return rc;
}
int cmd_worktree(int ac, const char **av, const char *prefix)
{
struct option options[] = {
@ -1056,5 +1069,7 @@ int cmd_worktree(int ac, const char **av, const char *prefix)
return move_worktree(ac - 1, av + 1, prefix);
if (!strcmp(av[1], "remove"))
return remove_worktree(ac - 1, av + 1, prefix);
if (!strcmp(av[1], "repair"))
return repair(ac - 1, av + 1, prefix);
usage_with_options(worktree_usage, options);
}