 859fdabaed
			
		
	
	859fdabaed
	
	
	
		
			
			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>
		
	
		
			
				
	
	
		
			51 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/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
 |