|  | #!/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' ' | 
|  | test_i18ngrep "Switched to branch" stderr && | 
|  | test_i18ngrep ! "^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' ' | 
|  | test_i18ngrep "Switched to branch" stderr && | 
|  | test_i18ngrep ! "^HEAD is now at" stderr | 
|  | ' | 
|  |  | 
|  | test_done |