diff options
author | Tay Ray Chuan <rctay89@gmail.com> | 2010-08-10 00:52:26 +0800 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2010-08-09 12:57:17 -0700 |
commit | cc70148385d5a36682d3b67fdaa726590577f257 (patch) | |
tree | 68f573fe1939b6b06031624c12dfdbf2553d72cd | |
parent | 02ac98374eefbe4a46d4b53a8a78057ad8ad39b7 (diff) | |
download | git-cc70148385d5a36682d3b67fdaa726590577f257.tar.gz git-cc70148385d5a36682d3b67fdaa726590577f257.tar.xz |
builtin/checkout: handle -B from detached HEAD correctly
Ensure that strcmp() isn't called when head is null.
Previously we were getting segfaults when checkout -B was done from a
detached HEAD.
Signed-off-by: Tay Ray Chuan <rctay89@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r-- | branch.c | 2 | ||||
-rwxr-xr-x | t/t2018-checkout-branch.sh | 6 |
2 files changed, 7 insertions, 1 deletions
@@ -159,7 +159,7 @@ void create_branch(const char *head, dont_change_ref = 1; else if (!force) die("A branch named '%s' already exists.", name); - else if (!is_bare_repository() && !strcmp(head, name)) + else if (!is_bare_repository() && head && !strcmp(head, name)) die("Cannot force update the current branch."); forcing = 1; } diff --git a/t/t2018-checkout-branch.sh b/t/t2018-checkout-branch.sh index 1caffeac0..fa6901638 100755 --- a/t/t2018-checkout-branch.sh +++ b/t/t2018-checkout-branch.sh @@ -124,6 +124,12 @@ test_expect_success 'checkout -B to an existing branch resets branch to HEAD' ' do_checkout branch2 "" -B ' +test_expect_success 'checkout -B to an existing branch from detached HEAD resets branch to HEAD' ' + git checkout $(git rev-parse --verify HEAD) && + + do_checkout branch2 "" -B +' + test_expect_success 'checkout -B to an existing branch with an explicit ref resets branch to that ref' ' git checkout branch1 && |