{"thread":{"id":"24682","subject":"[PATCH] builtin/checkout: handle -B from detached HEAD correctly","startedAt":"2010-08-09T16:52:26Z","lastAt":"2010-08-09T16:52:26Z","messageCount":1,"participants":["Tay Ray Chuan"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"147516","messageId":"1281372746-5088-1-git-send-email-rctay89@gmail.com","threadId":"24682","inReplyTo":null,"subject":"[PATCH] builtin/checkout: handle -B from detached HEAD correctly","fromName":"Tay Ray Chuan","fromEmail":"rctay89@gmail.com","sentAt":"2010-08-09T16:52:26Z","receivedAt":"2010-08-09T16:52:26Z","isPatch":true,"sender":{"key":"rctay89@gmail.com","avatar":"https://avatars.githubusercontent.com/u/61553?v=4"},"body":"Ensure that strcmp() isn't called when head is null.\n\nPreviously we were getting segfaults when checkout -B was done from a\ndetached HEAD.\n\nSigned-off-by: Tay Ray Chuan <rctay89@gmail.com>\n---\n\n  Junio, this goes on top of the 'tc/checkout-B' series.\n\n branch.c                   |    2 +-\n t/t2018-checkout-branch.sh |    6 ++++++\n 2 files changed, 7 insertions(+), 1 deletions(-)\n\ndiff --git a/branch.c b/branch.c\nindex 2ab42aa..93dc866 100644\n--- a/branch.c\n+++ b/branch.c\n@@ -159,7 +159,7 @@ void create_branch(const char *head,\n \t\t\tdont_change_ref = 1;\n \t\telse if (!force)\n \t\t\tdie(\"A branch named '%s' already exists.\", name);\n-\t\telse if (!is_bare_repository() && !strcmp(head, name))\n+\t\telse if (!is_bare_repository() && head && !strcmp(head, name))\n \t\t\tdie(\"Cannot force update the current branch.\");\n \t\tforcing = 1;\n \t}\ndiff --git a/t/t2018-checkout-branch.sh b/t/t2018-checkout-branch.sh\nindex 1caffea..fa69016 100755\n--- a/t/t2018-checkout-branch.sh\n+++ b/t/t2018-checkout-branch.sh\n@@ -124,6 +124,12 @@ test_expect_success 'checkout -B to an existing branch resets branch to HEAD' '\n \tdo_checkout branch2 \"\" -B\n '\n\n+test_expect_success 'checkout -B to an existing branch from detached HEAD resets branch to HEAD' '\n+\tgit checkout $(git rev-parse --verify HEAD) &&\n+\n+\tdo_checkout branch2 \"\" -B\n+'\n+\n test_expect_success 'checkout -B to an existing branch with an explicit ref resets branch to that ref' '\n \tgit checkout branch1 &&\n\n--\n1.7.2.1.57.ga5ce7c\n"}]}