| #!/bin/sh | 
 |  | 
 | test_description='checkout and pathspecs/refspecs ambiguities' | 
 |  | 
 | . ./test-lib.sh | 
 |  | 
 | test_expect_success 'setup' ' | 
 | 	echo hello >world && | 
 | 	echo hello >all && | 
 | 	git add all world && | 
 | 	git commit -m initial && | 
 | 	git branch world | 
 | ' | 
 |  | 
 | test_expect_success 'reference must be a tree' ' | 
 | 	test_must_fail git checkout $(git hash-object ./all) -- | 
 | ' | 
 |  | 
 | test_expect_success 'branch switching' ' | 
 | 	test "refs/heads/master" = "$(git symbolic-ref HEAD)" && | 
 | 	git checkout world -- && | 
 | 	test "refs/heads/world" = "$(git symbolic-ref HEAD)" | 
 | ' | 
 |  | 
 | test_expect_success 'checkout world from the index' ' | 
 | 	echo bye > world && | 
 | 	git checkout -- world && | 
 | 	git diff --exit-code --quiet | 
 | ' | 
 |  | 
 | test_expect_success 'non ambiguous call' ' | 
 | 	git checkout all | 
 | ' | 
 |  | 
 | test_expect_success 'allow the most common case' ' | 
 | 	git checkout world && | 
 | 	test "refs/heads/world" = "$(git symbolic-ref HEAD)" | 
 | ' | 
 |  | 
 | test_expect_success 'check ambiguity' ' | 
 | 	test_must_fail git checkout world all | 
 | ' | 
 |  | 
 | test_expect_success 'disambiguate checking out from a tree-ish' ' | 
 | 	echo bye > world && | 
 | 	git checkout world -- world && | 
 | 	git diff --exit-code --quiet | 
 | ' | 
 |  | 
 | test_done |