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:
parent
e9b77c84a0
commit
e8e1ff24c5
@ -15,6 +15,7 @@ SYNOPSIS
|
|||||||
'git worktree move' <worktree> <new-path>
|
'git worktree move' <worktree> <new-path>
|
||||||
'git worktree prune' [-n] [-v] [--expire <expire>]
|
'git worktree prune' [-n] [-v] [--expire <expire>]
|
||||||
'git worktree remove' [-f] <worktree>
|
'git worktree remove' [-f] <worktree>
|
||||||
|
'git worktree repair'
|
||||||
'git worktree unlock' <worktree>
|
'git worktree unlock' <worktree>
|
||||||
|
|
||||||
DESCRIPTION
|
DESCRIPTION
|
||||||
@ -110,6 +111,11 @@ and no modification in tracked files) can be removed. Unclean working
|
|||||||
trees or ones with submodules can be removed with `--force`. The main
|
trees or ones with submodules can be removed with `--force`. The main
|
||||||
working tree cannot be removed.
|
working tree cannot be removed.
|
||||||
|
|
||||||
|
repair::
|
||||||
|
|
||||||
|
Repair working tree administrative files, if possible, if they have
|
||||||
|
become corrupted or outdated due to external factors.
|
||||||
|
|
||||||
unlock::
|
unlock::
|
||||||
|
|
||||||
Unlock a working tree, allowing it to be pruned, moved or deleted.
|
Unlock a working tree, allowing it to be pruned, moved or deleted.
|
||||||
|
@ -1030,6 +1030,19 @@ static int remove_worktree(int ac, const char **av, const char *prefix)
|
|||||||
return ret;
|
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)
|
int cmd_worktree(int ac, const char **av, const char *prefix)
|
||||||
{
|
{
|
||||||
struct option options[] = {
|
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);
|
return move_worktree(ac - 1, av + 1, prefix);
|
||||||
if (!strcmp(av[1], "remove"))
|
if (!strcmp(av[1], "remove"))
|
||||||
return remove_worktree(ac - 1, av + 1, prefix);
|
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);
|
usage_with_options(worktree_usage, options);
|
||||||
}
|
}
|
||||||
|
11
t/t2406-worktree-repair.sh
Executable file
11
t/t2406-worktree-repair.sh
Executable file
@ -0,0 +1,11 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
test_description='test git worktree repair'
|
||||||
|
|
||||||
|
. ./test-lib.sh
|
||||||
|
|
||||||
|
test_expect_success setup '
|
||||||
|
test_commit init
|
||||||
|
'
|
||||||
|
|
||||||
|
test_done
|
Loading…
Reference in New Issue
Block a user