The plan is eventually to populate the new worktree via "git reset
--hard" rather than "git checkout". Thus, rather than piggybacking on
git-checkout's -b/-B ability to create a new branch at checkout time,
git-worktree will need to do so itself.

Signed-off-by: Eric Sunshine <sunsh...@sunshineco.com>
---

I considered calling branch-related API, such as create_branch(),
directly, however, git-branch provides extra value which may be useful
in the future (such as when --track and --orphan get added to
git-worktree), so it seemed wise to re-use git-branch's implementation
rather than duplicating the functionality. If this proves the wrong
choice, then the series can either be re-rolled or follow-on patches can
address the issue.

 builtin/worktree.c | 17 ++++++++++++++---
 1 file changed, 14 insertions(+), 3 deletions(-)

diff --git a/builtin/worktree.c b/builtin/worktree.c
index cd06bf5..9be1c74 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);
-- 
2.5.0.rc1.201.ga12d9f8

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to