 2b5ec01845
			
		
	
	2b5ec01845
	
	
	
		
			
			rev-parse --parseopt exits with code 129 (usage error) when asked to dump usage with -h on behalf of another command. Scripts can take advantage of this to avoid trying to parse usage information as though it were the regular output from some git command. Noticed with an &&-chaining tester. Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
		
			
				
	
	
		
			103 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			103 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/sh
 | |
| 
 | |
| test_description='test git rev-parse --parseopt'
 | |
| . ./test-lib.sh
 | |
| 
 | |
| cat > expect <<\END_EXPECT
 | |
| cat <<\EOF
 | |
| usage: some-command [options] <args>...
 | |
| 
 | |
|     some-command does foo and bar!
 | |
| 
 | |
|     -h, --help            show the help
 | |
|     --foo                 some nifty option --foo
 | |
|     --bar ...             some cool option --bar with an argument
 | |
| 
 | |
| An option group Header
 | |
|     -C[...]               option C with an optional argument
 | |
| 
 | |
| Extras
 | |
|     --extra1              line above used to cause a segfault but no longer does
 | |
| 
 | |
| EOF
 | |
| END_EXPECT
 | |
| 
 | |
| cat > optionspec << EOF
 | |
| some-command [options] <args>...
 | |
| 
 | |
| some-command does foo and bar!
 | |
| --
 | |
| h,help    show the help
 | |
| 
 | |
| foo       some nifty option --foo
 | |
| bar=      some cool option --bar with an argument
 | |
| 
 | |
|  An option group Header
 | |
| C?        option C with an optional argument
 | |
| 
 | |
| Extras
 | |
| extra1    line above used to cause a segfault but no longer does
 | |
| EOF
 | |
| 
 | |
| test_expect_success 'test --parseopt help output' '
 | |
| 	test_expect_code 129 git rev-parse --parseopt -- -h > output < optionspec &&
 | |
| 	test_cmp expect output
 | |
| '
 | |
| 
 | |
| cat > expect <<EOF
 | |
| set -- --foo --bar 'ham' -- 'arg'
 | |
| EOF
 | |
| 
 | |
| test_expect_success 'test --parseopt' '
 | |
| 	git rev-parse --parseopt -- --foo --bar=ham arg < optionspec > output &&
 | |
| 	test_cmp expect output
 | |
| '
 | |
| 
 | |
| test_expect_success 'test --parseopt with mixed options and arguments' '
 | |
| 	git rev-parse --parseopt -- --foo arg --bar=ham < optionspec > output &&
 | |
| 	test_cmp expect output
 | |
| '
 | |
| 
 | |
| cat > expect <<EOF
 | |
| set -- --foo -- 'arg' '--bar=ham'
 | |
| EOF
 | |
| 
 | |
| test_expect_success 'test --parseopt with --' '
 | |
| 	git rev-parse --parseopt -- --foo -- arg --bar=ham < optionspec > output &&
 | |
| 	test_cmp expect output
 | |
| '
 | |
| 
 | |
| test_expect_success 'test --parseopt --stop-at-non-option' '
 | |
| 	git rev-parse --parseopt --stop-at-non-option -- --foo arg --bar=ham < optionspec > output &&
 | |
| 	test_cmp expect output
 | |
| '
 | |
| 
 | |
| cat > expect <<EOF
 | |
| set -- --foo -- '--' 'arg' '--bar=ham'
 | |
| EOF
 | |
| 
 | |
| test_expect_success 'test --parseopt --keep-dashdash' '
 | |
| 	git rev-parse --parseopt --keep-dashdash -- --foo -- arg --bar=ham < optionspec > output &&
 | |
| 	test_cmp expect output
 | |
| '
 | |
| 
 | |
| cat >expect <<EOF
 | |
| set -- --foo -- '--' 'arg' '--spam=ham'
 | |
| EOF
 | |
| 
 | |
| test_expect_success 'test --parseopt --keep-dashdash --stop-at-non-option with --' '
 | |
| 	git rev-parse --parseopt --keep-dashdash --stop-at-non-option -- --foo -- arg --spam=ham <optionspec >output &&
 | |
| 	test_cmp expect output
 | |
| '
 | |
| 
 | |
| cat > expect <<EOF
 | |
| set -- --foo -- 'arg' '--spam=ham'
 | |
| EOF
 | |
| 
 | |
| test_expect_success 'test --parseopt --keep-dashdash --stop-at-non-option without --' '
 | |
| 	git rev-parse --parseopt --keep-dashdash --stop-at-non-option -- --foo arg --spam=ham <optionspec >output &&
 | |
| 	test_cmp expect output
 | |
| '
 | |
| 
 | |
| test_done
 |