rebase: stricter check of standalone sub command
The sub commands '--continue', '--skip' or '--abort' may only be used standalone according to the documentation. Other options following the sub command are currently not accepted, but options preceeding them are. For example, 'git rebase --continue -v' is not accepted, while 'git rebase -v --continue' is. Tighten up the check and allow no other options when one of these sub commands are used. Only check that it is standalone for non-interactive rebase for now. Once the command line processing for interactive rebase has been replaced by the command line processing in git-rebase.sh, this check will also apply to interactive rebase. Signed-off-by: Martin von Zweigbergk <martin.von.zweigbergk@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
							parent
							
								
									3426232248
								
							
						
					
					
						commit
						95135b06fe
					
				|  | @ -229,6 +229,7 @@ then | ||||||
| fi | fi | ||||||
| test -n "$type" && in_progress=t | test -n "$type" && in_progress=t | ||||||
|  |  | ||||||
|  | total_argc=$# | ||||||
| while test $# != 0 | while test $# != 0 | ||||||
| do | do | ||||||
| 	case "$1" in | 	case "$1" in | ||||||
|  | @ -239,9 +240,8 @@ do | ||||||
| 		OK_TO_SKIP_PRE_REBASE= | 		OK_TO_SKIP_PRE_REBASE= | ||||||
| 		;; | 		;; | ||||||
| 	--continue|--skip|--abort) | 	--continue|--skip|--abort) | ||||||
|  | 		test $total_argc -eq 1 || usage | ||||||
| 		action=${1##--} | 		action=${1##--} | ||||||
| 		shift |  | ||||||
| 		break |  | ||||||
| 		;; | 		;; | ||||||
| 	--onto) | 	--onto) | ||||||
| 		test 2 -le "$#" || usage | 		test 2 -le "$#" || usage | ||||||
|  |  | ||||||
|  | @ -35,6 +35,11 @@ test_expect_success 'rebase with git am -3 (default)' ' | ||||||
| 	test_must_fail git rebase master | 	test_must_fail git rebase master | ||||||
| ' | ' | ||||||
|  |  | ||||||
|  | test_expect_success 'rebase --skip can not be used with other options' ' | ||||||
|  | 	test_must_fail git rebase -v --skip && | ||||||
|  | 	test_must_fail git rebase --skip -v | ||||||
|  | ' | ||||||
|  |  | ||||||
| test_expect_success 'rebase --skip with am -3' ' | test_expect_success 'rebase --skip with am -3' ' | ||||||
| 	git rebase --skip | 	git rebase --skip | ||||||
| 	' | 	' | ||||||
|  |  | ||||||
|  | @ -84,6 +84,16 @@ testrebase() { | ||||||
| 		test_cmp reflog_before reflog_after && | 		test_cmp reflog_before reflog_after && | ||||||
| 		rm reflog_before reflog_after | 		rm reflog_before reflog_after | ||||||
| 	' | 	' | ||||||
|  |  | ||||||
|  | 	test_expect_success 'rebase --abort can not be used with other options' ' | ||||||
|  | 		cd "$work_dir" && | ||||||
|  | 		# Clean up the state from the previous one | ||||||
|  | 		git reset --hard pre-rebase && | ||||||
|  | 		test_must_fail git rebase$type master && | ||||||
|  | 		test_must_fail git rebase -v --abort && | ||||||
|  | 		test_must_fail git rebase --abort -v && | ||||||
|  | 		git rebase --abort | ||||||
|  | 	' | ||||||
| } | } | ||||||
|  |  | ||||||
| testrebase "" .git/rebase-apply | testrebase "" .git/rebase-apply | ||||||
|  |  | ||||||
|  | @ -40,4 +40,9 @@ test_expect_success 'non-interactive rebase --continue works with touched file' | ||||||
| 	git rebase --continue | 	git rebase --continue | ||||||
| ' | ' | ||||||
|  |  | ||||||
|  | test_expect_success 'rebase --continue can not be used with other options' ' | ||||||
|  | 	test_must_fail git rebase -v --continue && | ||||||
|  | 	test_must_fail git rebase --continue -v | ||||||
|  | ' | ||||||
|  |  | ||||||
| test_done | test_done | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 Martin von Zweigbergk
						Martin von Zweigbergk