]> git.ipfire.org Git - thirdparty/git.git/blobdiff - t/t2010-checkout-ambiguous.sh
git-checkout: improve error messages, detect ambiguities.
[thirdparty/git.git] / t / t2010-checkout-ambiguous.sh
diff --git a/t/t2010-checkout-ambiguous.sh b/t/t2010-checkout-ambiguous.sh
new file mode 100755 (executable)
index 0000000..7cc0a35
--- /dev/null
@@ -0,0 +1,50 @@
+#!/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