Jeff King <peff@xxxxxxxx> writes: > Here is the test script I worked out which shows the issue (and checks > that the right messages are shown to the user): This is a band-aid that is not quite right (even though it passes the tests). Attempting to check out a branch "frotz" in a repository with a tag "frotz" that point at a non-commit would still fail, which is not a new problem. builtin/checkout.c | 7 +++++++ t/t2019-checkout-amiguous-ref.sh | 23 ++++++++++++++++++++++- 2 files changed, 29 insertions(+), 1 deletions(-) diff --git a/builtin/checkout.c b/builtin/checkout.c index a54583b..f6fea2f 100644 --- a/builtin/checkout.c +++ b/builtin/checkout.c @@ -840,6 +840,13 @@ int cmd_checkout(int argc, const char **argv, const char *prefix) ; else new.path = NULL; + if (hashcmp(new.commit->object.sha1, rev)) + /* + * Yikes, arg is an ambiguous and higher + * precedence SHA-1 expression than the + * branch name + */ + new.commit = lookup_commit_reference_gently(rev, 1); parse_commit(new.commit); source_tree = new.commit->tree; } else diff --git a/t/t2019-checkout-amiguous-ref.sh b/t/t2019-checkout-amiguous-ref.sh index 0981f11..fa1d4e6 100755 --- a/t/t2019-checkout-amiguous-ref.sh +++ b/t/t2019-checkout-amiguous-ref.sh @@ -6,8 +6,10 @@ test_description='checkout handling of ambiguous (branch/tag) refs' test_expect_success 'setup ambiguous refs' ' test_commit branch file && git branch ambiguity && + git branch vagueness && test_commit tag file && git tag ambiguity && + git tag vagueness HEAD:file && test_commit other file ' @@ -19,7 +21,7 @@ test_expect_success 'checkout produces ambiguity warning' ' grep "warning.*ambiguous" stderr ' -test_expect_failure 'checkout chooses branch over tag' ' +test_expect_success 'checkout chooses branch over tag' ' echo branch >expect && test_cmp expect file ' @@ -29,4 +31,23 @@ test_expect_success 'checkout reports switch to detached HEAD' ' ! grep "^HEAD is now at" stderr ' +test_expect_failure 'checkout vague ref succeeds' ' + git checkout vagueness >stdout 2>stderr && + test_set_prereq VAGUENESS_SUCCESS +' + +test_expect_success VAGUENESS_SUCCESS 'checkout produces ambiguity warning' ' + grep "warning.*ambiguous" stderr +' + +test_expect_success VAGUENESS_SUCCESS 'checkout chooses branch over tag' ' + echo branch >expect && + test_cmp expect file +' + +test_expect_success VAGUENESS_SUCCESS 'checkout reports switch to detached HEAD' ' + grep "Switched to branch" stderr && + ! grep "^HEAD is now at" stderr +' + test_done -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html