aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2009-01-03 13:57:30 -0800
committerJunio C Hamano <gitster@pobox.com>2009-01-03 13:57:30 -0800
commit8ea6ae99b2314ddb24dd9121335b7a5583047f05 (patch)
tree4041eec5fe9cfc6ba30192cee72a10f6125179c7
parentcaf8b2fbd4b49c66aa70624eaf35ebcdc007ad6d (diff)
parent3442ea4a75a3c76f65efac71b414584f765e5a99 (diff)
downloadgit-8ea6ae99b2314ddb24dd9121335b7a5583047f05.tar.gz
git-8ea6ae99b2314ddb24dd9121335b7a5583047f05.tar.xz
Merge branch 'jc/maint-do-not-switch-to-non-commit'
* jc/maint-do-not-switch-to-non-commit: git checkout: do not allow switching to a tree-ish that is not a commit
-rw-r--r--builtin-checkout.c2
-rwxr-xr-xt/t2011-checkout-invalid-head.sh4
2 files changed, 5 insertions, 1 deletions
diff --git a/builtin-checkout.c b/builtin-checkout.c
index c2c05613b..b5dd9c07b 100644
--- a/builtin-checkout.c
+++ b/builtin-checkout.c
@@ -681,8 +681,8 @@ int cmd_checkout(int argc, const char **argv, const char *prefix)
argv++;
argc--;
+ new.name = arg;
if ((new.commit = lookup_commit_reference_gently(rev, 1))) {
- new.name = arg;
setup_branch_path(&new);
if (resolve_ref(new.path, rev, 1, NULL))
new.commit = lookup_commit_reference(rev);
diff --git a/t/t2011-checkout-invalid-head.sh b/t/t2011-checkout-invalid-head.sh
index 764bb0a6b..15ebdc26e 100755
--- a/t/t2011-checkout-invalid-head.sh
+++ b/t/t2011-checkout-invalid-head.sh
@@ -10,6 +10,10 @@ test_expect_success 'setup' '
git commit -m initial
'
+test_expect_success 'checkout should not start branch from a tree' '
+ test_must_fail git checkout -b newbranch master^{tree}
+'
+
test_expect_success 'checkout master from invalid HEAD' '
echo 0000000000000000000000000000000000000000 >.git/HEAD &&
git checkout master --