]> git.ipfire.org Git - thirdparty/git.git/commitdiff
worktree: add: suppress auto-vivication with --detach and no <branch>
authorEric Sunshine <sunshine@sunshineco.com>
Fri, 17 Jul 2015 23:00:09 +0000 (19:00 -0400)
committerJunio C Hamano <gitster@pobox.com>
Mon, 20 Jul 2015 18:29:51 +0000 (11:29 -0700)
Fix oversight where branch auto-vivication incorrectly kicks in when
--detach is specified and <branch> omitted. Instead, treat:

    git worktree add --detach <path>

as shorthand for:

    git worktree add --detach <path> HEAD

Signed-off-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/git-worktree.txt
builtin/worktree.c
t/t2025-worktree-add.sh

index 32344598c3de54b17b9ae1f73d908252e354192b..332dd7734dfc3acca9e473b86bd0d6e30669750e 100644 (file)
@@ -51,9 +51,9 @@ Create `<path>` and checkout `<branch>` into it. The new working directory
 is linked to the current repository, sharing everything except working
 directory specific files such as HEAD, index, etc.
 +
-If `<branch>` is omitted and neither `-b` nor `-B` is used, then, as a
-convenience, a new branch based at HEAD is created automatically, as if
-`-b $(basename <path>)` was specified.
+If `<branch>` is omitted and neither `-b` nor `-B` nor `--detached` used,
+then, as a convenience, a new branch based at HEAD is created automatically,
+as if `-b $(basename <path>)` was specified.
 
 prune::
 
index 813e0161302abef6dda0352573fc08d2eee898aa..83484ad502da716cabceb5d379f10e1463e06ffb 100644 (file)
@@ -308,7 +308,7 @@ static int add(int ac, const char **av, const char *prefix)
        if (opts.force_new_branch)
                opts.new_branch = new_branch_force;
 
-       if (ac < 2 && !opts.new_branch) {
+       if (ac < 2 && !opts.new_branch && !opts.detach) {
                int n;
                const char *s = worktree_basename(path, &n);
                opts.new_branch = xstrndup(s, n);
index 249e4540dcf1207bf75835d2b6b6ebc8cc8bf685..8267411a0ec129a67cde5381cfd79824471d8fd2 100755 (executable)
@@ -153,6 +153,14 @@ test_expect_success '"add -b" with <branch> omitted' '
        test_cmp_rev HEAD burble
 '
 
+test_expect_success '"add --detach" with <branch> omitted' '
+       git worktree add --detach fishhook &&
+       git rev-parse HEAD >expected &&
+       git -C fishhook rev-parse HEAD >actual &&
+       test_cmp expected actual &&
+       test_must_fail git -C fishhook symbolic-ref HEAD
+'
+
 test_expect_success '"add" with <branch> omitted' '
        git worktree add wiffle/bat &&
        test_cmp_rev HEAD bat
@@ -167,6 +175,12 @@ test_expect_success '"add" auto-vivify does not clobber existing branch' '
        test_path_is_missing precious
 '
 
+test_expect_success '"add" no auto-vivify with --detach and <branch> omitted' '
+       git worktree add --detach mish/mash &&
+       test_must_fail git rev-parse mash -- &&
+       test_must_fail git -C mish/mash symbolic-ref HEAD
+'
+
 test_expect_success '"add" -b/-B mutually exclusive' '
        test_must_fail git worktree add -b poodle -B poodle bamboo master
 '