about summary refs log tree commit diff
path: root/third_party/git/t/t2010-checkout-ambiguous.sh
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/git/t/t2010-checkout-ambiguous.sh')
-rwxr-xr-xthird_party/git/t/t2010-checkout-ambiguous.sh65
1 files changed, 65 insertions, 0 deletions
diff --git a/third_party/git/t/t2010-checkout-ambiguous.sh b/third_party/git/t/t2010-checkout-ambiguous.sh
new file mode 100755
index 0000000000..2e47fe01cf
--- /dev/null
+++ b/third_party/git/t/t2010-checkout-ambiguous.sh
@@ -0,0 +1,65 @@
+#!/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 'check ambiguity in subdir' '
+	mkdir sub &&
+	# not ambiguous because sub/world does not exist
+	git -C sub checkout world ../all &&
+	echo hello >sub/world &&
+	# ambiguous because sub/world does exist
+	test_must_fail git -C sub 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_expect_success 'accurate error message with more than one ref' '
+	test_must_fail git checkout HEAD master -- 2>actual &&
+	test_i18ngrep 2 actual &&
+	test_i18ngrep "one reference expected, 2 given" actual
+'
+
+test_done