[PATCH] git-checkout: disallow --detach on unborn branch
- From
Chris Webb <chris@arachsys.com>
- Date
- Jun 26, 2012, 15:06 UTC
- Message-ID
- <b9069a6c6af42f4771c5a5c1c812800c21926622.1340723202.git.chris@arachsys.com>
- In-Reply-To
- <20120626150436.GU9682@arachsys.com>
abe199808c (git checkout -b: allow switching out of an unborn branch) introduced a bug demonstrated by
git checkout --orphan foo git checkout --detach git symbolic-ref HEAD
which gives 'refs/heads/(null)'.
This happens because we strbuf_addf(&branch_ref, "refs/heads/%s", opts->new_branch) when opts->new_branch can be NULL for --detach.
Catch and forbid this case, adding a test to t2017 to catch it in future.
Signed-off-by: Chris Webb <chris@arachsys.com> --- builtin/checkout.c | 2 ++ t/t2017-checkout-orphan.sh | 6 ++++++ 2 files changed, 8 insertions(+)
diff --git a/builtin/checkout.c b/builtin/checkout.c index e8c1b1f..3980d5d 100644 --- a/builtin/checkout.c +++ b/builtin/checkout.c @@ -915,6 +915,8 @@ static int switch_unborn_to_new_branch(struct checkout_opts *opts) int status; struct strbuf branch_ref = STRBUF_INIT; + if (!opts->new_branch) + die(_("You are on a branch yet to be born")); strbuf_addf(&branch_ref, "refs/heads/%s", opts->new_branch); status = create_symref("HEAD", branch_ref.buf, "checkout -b"); strbuf_release(&branch_ref); diff --git a/t/t2017-checkout-orphan.sh b/t/t2017-checkout-orphan.sh index 0e3b858..655f278 100755 --- a/t/t2017-checkout-orphan.sh +++ b/t/t2017-checkout-orphan.sh @@ -116,4 +116,10 @@ test_expect_success '--orphan refuses to switch if a merge is needed' ' git reset --hard ' +test_expect_success 'cannot --detach on an unborn branch' ' + git checkout master && + git checkout --orphan new && + test_must_fail git checkout --detach +' + test_done
-- 1.7.10