--- /dev/null
--- /dev/null
++#!/bin/sh
++
++test_description='checkout handling of ambiguous (branch/tag) refs'
++. ./test-lib.sh
++
++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
++'
++
++test_expect_success 'checkout ambiguous ref succeeds' '
++ git checkout ambiguity >stdout 2>stderr
++'
++
++test_expect_success 'checkout produces ambiguity warning' '
++ grep "warning.*ambiguous" stderr
++'
++
++test_expect_success 'checkout chooses branch over tag' '
++ echo refs/heads/ambiguity >expect &&
++ git symbolic-ref HEAD >actual &&
++ test_cmp expect actual &&
++ echo branch >expect &&
++ test_cmp expect file
++'
++
++test_expect_success 'checkout reports switch to branch' '
++ grep "Switched to branch" stderr &&
++ ! grep "^HEAD is now at" stderr
++'
++
++test_expect_success '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 refs/heads/vagueness >expect &&
++ git symbolic-ref HEAD >actual &&
++ test_cmp expect actual &&
++ echo branch >expect &&
++ test_cmp expect file
++'
++
++test_expect_success VAGUENESS_SUCCESS 'checkout reports switch to branch' '
++ grep "Switched to branch" stderr &&
++ ! grep "^HEAD is now at" stderr
++'
++
++test_done