mirror of
https://github.com/git/git.git
synced 2026-01-10 10:13:33 +00:00
git-checkout: improve error messages, detect ambiguities.
The patch is twofold: it moves the option consistency checks just under
the parse_options call so that it doesn't get in the way of the tree
reference vs. pathspecs desambiguation.
The other part rewrites the way to understand arguments so that when
git-checkout fails it does with an understandable message. Compared to the
previous behavior we now have:
- a better error message when doing:
git checkout <blob reference> --
now complains about the reference not pointing to a tree, instead of
things like:
error: pathspec <blob reference> did not match any file(s) known to git.
error: pathspec '--' did not match any file(s) known to git.
- a better error message when doing:
git checkout <path> --
It now complains about <path> not being a reference instead of the
completely obscure:
error: pathspec '--' did not match any file(s) known to git.
- an error when -- wasn't used, and the first argument is ambiguous
(i.e. can be interpreted as both ref and as path).
Signed-off-by: Pierre Habouzit <madcoder@debian.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
6536034630
commit
859fdabaed
50
t/t2010-checkout-ambiguous.sh
Executable file
50
t/t2010-checkout-ambiguous.sh
Executable file
@@ -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
|
||||
Reference in New Issue
Block a user