rebase: allow --skip to work with --merge
Now that we control the merge base selection, we won't be forced into rolling things in that we wanted to skip beforehand. Also, add a test to ensure this all works as intended. Signed-off-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <junkio@cox.net>maint
							parent
							
								
									9e4bc7dd1b
								
							
						
					
					
						commit
						d5e673b60b
					
				|  | @ -108,7 +108,6 @@ OPTIONS | |||
|  | ||||
| --skip:: | ||||
| 	Restart the rebasing process by skipping the current patch. | ||||
| 	This does not work with the --merge option. | ||||
|  | ||||
| --merge:: | ||||
| 	Use merging strategies to rebase.  When the recursive (default) merge | ||||
|  |  | |||
|  | @ -137,7 +137,18 @@ do | |||
| 	--skip) | ||||
| 		if test -d "$dotest" | ||||
| 		then | ||||
| 			die "--skip is not supported when using --merge" | ||||
| 			prev_head="`cat $dotest/prev_head`" | ||||
| 			end="`cat $dotest/end`" | ||||
| 			msgnum="`cat $dotest/msgnum`" | ||||
| 			msgnum=$(($msgnum + 1)) | ||||
| 			onto="`cat $dotest/onto`" | ||||
| 			while test "$msgnum" -le "$end" | ||||
| 			do | ||||
| 				call_merge "$msgnum" | ||||
| 				continue_merge | ||||
| 			done | ||||
| 			finish_rb_merge | ||||
| 			exit | ||||
| 		fi | ||||
| 		git am -3 --skip --resolvemsg="$RESOLVEMSG" | ||||
| 		exit | ||||
|  |  | |||
|  | @ -0,0 +1,61 @@ | |||
| #!/bin/sh | ||||
| # | ||||
| # Copyright (c) 2006 Eric Wong | ||||
| # | ||||
|  | ||||
| test_description='git rebase --merge --skip tests' | ||||
|  | ||||
| . ./test-lib.sh | ||||
|  | ||||
| # we assume the default git-am -3 --skip strategy is tested independently | ||||
| # and always works :) | ||||
|  | ||||
| if test "$no_python"; then | ||||
| 	echo "Skipping: no python => no recursive merge" | ||||
| 	test_done | ||||
| 	exit 0 | ||||
| fi | ||||
|  | ||||
| test_expect_success setup ' | ||||
| 	echo hello > hello && | ||||
| 	git add hello && | ||||
| 	git commit -m "hello" && | ||||
| 	git branch skip-reference && | ||||
|  | ||||
| 	echo world >> hello && | ||||
| 	git commit -a -m "hello world" && | ||||
| 	echo goodbye >> hello && | ||||
| 	git commit -a -m "goodbye" && | ||||
|  | ||||
| 	git checkout -f skip-reference && | ||||
| 	echo moo > hello && | ||||
| 	git commit -a -m "we should skip this" && | ||||
| 	echo moo > cow && | ||||
| 	git add cow && | ||||
| 	git commit -m "this should not be skipped" && | ||||
| 	git branch pre-rebase skip-reference && | ||||
| 	git branch skip-merge skip-reference | ||||
| 	' | ||||
|  | ||||
| test_expect_failure 'rebase with git am -3 (default)' 'git rebase master' | ||||
|  | ||||
| test_expect_success 'rebase --skip with am -3' ' | ||||
| 	git reset --hard HEAD && | ||||
| 	git rebase --skip | ||||
| 	' | ||||
| test_expect_success 'checkout skip-merge' 'git checkout -f skip-merge' | ||||
|  | ||||
| test_expect_failure 'rebase with --merge' 'git rebase --merge master' | ||||
|  | ||||
| test_expect_success 'rebase --skip with --merge' ' | ||||
| 	git reset --hard HEAD && | ||||
| 	git rebase --skip | ||||
| 	' | ||||
|  | ||||
| test_expect_success 'merge and reference trees equal' \ | ||||
| 	'test -z "`git-diff-tree skip-merge skip-reference`"' | ||||
|  | ||||
| test_debug 'gitk --all & sleep 1' | ||||
|  | ||||
| test_done | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	 Eric Wong
						Eric Wong