worktree: add: introduce --checkout option
By adding this option which defaults to true, we can use the corresponding --no-checkout to make some customizations before the checkout, like sparse checkout, etc. Helped-by: Eric Sunshine <sunshine@sunshineco.com> Helped-by: Junio C Hamano <gitster@pobox.com> Reviewed-by: Eric Sunshine <sunshine@sunshineco.com> Signed-off-by: Ray Zhang <zhanglei002@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
56331f8727
commit
ef2a0ac9a0
@ -9,7 +9,7 @@ git-worktree - Manage multiple working trees
|
||||
SYNOPSIS
|
||||
--------
|
||||
[verse]
|
||||
'git worktree add' [-f] [--detach] [-b <new-branch>] <path> [<branch>]
|
||||
'git worktree add' [-f] [--detach] [--checkout] [-b <new-branch>] <path> [<branch>]
|
||||
'git worktree prune' [-n] [-v] [--expire <expire>]
|
||||
'git worktree list' [--porcelain]
|
||||
|
||||
@ -87,6 +87,12 @@ OPTIONS
|
||||
With `add`, detach HEAD in the new working tree. See "DETACHED HEAD"
|
||||
in linkgit:git-checkout[1].
|
||||
|
||||
--[no-]checkout::
|
||||
By default, `add` checks out `<branch>`, however, `--no-checkout` can
|
||||
be used to suppress checkout in order to make customizations,
|
||||
such as configuring sparse-checkout. See "Sparse checkout"
|
||||
in linkgit:git-read-tree[1].
|
||||
|
||||
-n::
|
||||
--dry-run::
|
||||
With `prune`, do not remove anything; just report what it would
|
||||
|
@ -21,6 +21,7 @@ static const char * const worktree_usage[] = {
|
||||
struct add_opts {
|
||||
int force;
|
||||
int detach;
|
||||
int checkout;
|
||||
const char *new_branch;
|
||||
int force_new_branch;
|
||||
};
|
||||
@ -284,18 +285,22 @@ static int add_worktree(const char *path, const char *refname,
|
||||
if (ret)
|
||||
goto done;
|
||||
|
||||
cp.argv = NULL;
|
||||
argv_array_clear(&cp.args);
|
||||
argv_array_pushl(&cp.args, "reset", "--hard", NULL);
|
||||
cp.env = child_env.argv;
|
||||
ret = run_command(&cp);
|
||||
if (!ret) {
|
||||
is_junk = 0;
|
||||
free(junk_work_tree);
|
||||
free(junk_git_dir);
|
||||
junk_work_tree = NULL;
|
||||
junk_git_dir = NULL;
|
||||
if (opts->checkout) {
|
||||
cp.argv = NULL;
|
||||
argv_array_clear(&cp.args);
|
||||
argv_array_pushl(&cp.args, "reset", "--hard", NULL);
|
||||
cp.env = child_env.argv;
|
||||
ret = run_command(&cp);
|
||||
if (ret)
|
||||
goto done;
|
||||
}
|
||||
|
||||
is_junk = 0;
|
||||
free(junk_work_tree);
|
||||
free(junk_git_dir);
|
||||
junk_work_tree = NULL;
|
||||
junk_git_dir = NULL;
|
||||
|
||||
done:
|
||||
strbuf_reset(&sb);
|
||||
strbuf_addf(&sb, "%s/locked", sb_repo.buf);
|
||||
@ -320,10 +325,12 @@ static int add(int ac, const char **av, const char *prefix)
|
||||
OPT_STRING('B', NULL, &new_branch_force, N_("branch"),
|
||||
N_("create or reset a branch")),
|
||||
OPT_BOOL(0, "detach", &opts.detach, N_("detach HEAD at named commit")),
|
||||
OPT_BOOL(0, "checkout", &opts.checkout, N_("populate the new working tree")),
|
||||
OPT_END()
|
||||
};
|
||||
|
||||
memset(&opts, 0, sizeof(opts));
|
||||
opts.checkout = 1;
|
||||
ac = parse_options(ac, av, prefix, options, worktree_usage, 0);
|
||||
if (!!opts.detach + !!opts.new_branch + !!new_branch_force > 1)
|
||||
die(_("-b, -B, and --detach are mutually exclusive"));
|
||||
|
@ -213,4 +213,16 @@ test_expect_success 'local clone from linked checkout' '
|
||||
( cd here-clone && git fsck )
|
||||
'
|
||||
|
||||
test_expect_success '"add" worktree with --no-checkout' '
|
||||
git worktree add --no-checkout -b swamp swamp &&
|
||||
! test -e swamp/init.t &&
|
||||
git -C swamp reset --hard &&
|
||||
test_cmp init.t swamp/init.t
|
||||
'
|
||||
|
||||
test_expect_success '"add" worktree with --checkout' '
|
||||
git worktree add --checkout -b swmap2 swamp2 &&
|
||||
test_cmp init.t swamp2/init.t
|
||||
'
|
||||
|
||||
test_done
|
||||
|
Loading…
Reference in New Issue
Block a user