diff options
author | Eric Sunshine <sunshine@sunshineco.com> | 2015-07-18 01:00:10 +0200 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2015-07-20 20:29:51 +0200 |
commit | c2842439a3ab9bcab122105f3f457afb37fbc7c1 (patch) | |
tree | fd9e02af4b22d4ead36c72253daf171578121759 /builtin/worktree.c | |
parent | worktree: add: suppress auto-vivication with --detach and no <branch> (diff) | |
download | git-c2842439a3ab9bcab122105f3f457afb37fbc7c1.tar.xz git-c2842439a3ab9bcab122105f3f457afb37fbc7c1.zip |
worktree: make branch creation distinct from worktree population
git-worktree currently conflates branch creation, setting of HEAD in the
new worktree, and worktree population into a single sub-invocation of
git-checkout, which requires git-checkout to be specially aware that it
is operating in a newly-created worktree. The goal is to free
git-checkout of that special knowledge, and to do so, git-worktree will
eventually perform those operations separately. Thus, as a first step,
rather than piggybacking on git-checkout's -b/-B ability to create a new
branch at checkout time, make git-worktree responsible for branch
creation itself.
Signed-off-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin/worktree.c')
-rw-r--r-- | builtin/worktree.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/builtin/worktree.c b/builtin/worktree.c index 83484ad502..8225468f11 100644 --- a/builtin/worktree.c +++ b/builtin/worktree.c @@ -314,12 +314,23 @@ static int add(int ac, const char **av, const char *prefix) opts.new_branch = xstrndup(s, n); } + if (opts.new_branch) { + struct child_process cp; + memset(&cp, 0, sizeof(cp)); + cp.git_cmd = 1; + argv_array_push(&cp.args, "branch"); + if (opts.force_new_branch) + argv_array_push(&cp.args, "--force"); + argv_array_push(&cp.args, opts.new_branch); + argv_array_push(&cp.args, branch); + if (run_command(&cp)) + return -1; + branch = opts.new_branch; + } + argv_array_push(&cmd, "checkout"); if (opts.force) argv_array_push(&cmd, "--ignore-other-worktrees"); - if (opts.new_branch) - argv_array_pushl(&cmd, opts.force_new_branch ? "-B" : "-b", - opts.new_branch, NULL); if (opts.detach) argv_array_push(&cmd, "--detach"); argv_array_push(&cmd, branch); |