Merge branch 'do/maint-merge-recursive-fix'
* do/maint-merge-recursive-fix: merge-recursive: never leave index unmerged while recursingmaint
						commit
						d32643c0ff
					
				|  | @ -933,6 +933,7 @@ static int process_renames(struct merge_options *o, | |||
| 				       ren1_src, ren1_dst, branch1, | ||||
| 				       branch2); | ||||
| 				update_file(o, 0, ren1->pair->two->sha1, ren1->pair->two->mode, ren1_dst); | ||||
| 				if (!o->call_depth) | ||||
| 					update_stages(ren1_dst, NULL, | ||||
| 							branch1 == o->branch1 ? | ||||
| 							ren1->pair->two : NULL, | ||||
|  |  | |||
|  | @ -0,0 +1,95 @@ | |||
| #!/bin/sh | ||||
|  | ||||
| test_description='merge-recursive backend test' | ||||
|  | ||||
| . ./test-lib.sh | ||||
|  | ||||
| #         A      <- create some files | ||||
| #        / \ | ||||
| #       B   C    <- cause rename/delete conflicts between B and C | ||||
| #      /     \ | ||||
| #     |\     /| | ||||
| #     | D   E | | ||||
| #     |  \ /  | | ||||
| #     |   X   | | ||||
| #     |  / \  | | ||||
| #     | /   \ | | ||||
| #     |/     \| | ||||
| #     F       G  <- merge E into B, D into C | ||||
| #      \     / | ||||
| #       \   / | ||||
| #        \ / | ||||
| #         H      <- recursive merge crashes | ||||
| # | ||||
|  | ||||
| # initialize | ||||
| test_expect_success 'setup repo with criss-cross history' ' | ||||
| 	mkdir data && | ||||
|  | ||||
| 	# create a bunch of files | ||||
| 	n=1 && | ||||
| 	while test $n -le 10 | ||||
| 	do | ||||
| 		echo $n > data/$n && | ||||
| 		n=$(($n+1)) || | ||||
| 		break | ||||
| 	done && | ||||
|  | ||||
| 	# check them in | ||||
| 	git add data && | ||||
| 	git commit -m A && | ||||
| 	git branch A && | ||||
|  | ||||
| 	# a file in one branch | ||||
| 	git checkout -b B A && | ||||
| 	git rm data/9 && | ||||
| 	git add data && | ||||
| 	git commit -m B && | ||||
|  | ||||
| 	# with a branch off of it | ||||
| 	git branch D && | ||||
|  | ||||
| 	# put some commits on D | ||||
| 	git checkout D && | ||||
| 	echo testD > data/testD && | ||||
| 	git add data && | ||||
| 	git commit -m D && | ||||
|  | ||||
| 	# back up to the top, create another branch and cause | ||||
| 	# a rename conflict with the file we deleted earlier | ||||
| 	git checkout -b C A && | ||||
| 	git mv data/9 data/new-9 && | ||||
| 	git add data && | ||||
| 	git commit -m C && | ||||
|  | ||||
| 	# with a branch off of it | ||||
| 	git branch E && | ||||
|  | ||||
| 	# put a commit on E | ||||
| 	git checkout E && | ||||
| 	echo testE > data/testE && | ||||
| 	git add data && | ||||
| 	git commit -m E && | ||||
|  | ||||
| 	# now, merge E into B | ||||
| 	git checkout B && | ||||
| 	test_must_fail git merge E && | ||||
| 	# force-resolve | ||||
| 	git add data && | ||||
| 	git commit -m F && | ||||
| 	git branch F && | ||||
|  | ||||
| 	# and merge D into C | ||||
| 	git checkout C && | ||||
| 	test_must_fail git merge D && | ||||
| 	# force-resolve | ||||
| 	git add data && | ||||
| 	git commit -m G && | ||||
| 	git branch G | ||||
| ' | ||||
|  | ||||
| test_expect_success 'recursive merge between F and G, causes segfault' ' | ||||
| 	git merge F | ||||
| ' | ||||
|  | ||||
| test_done | ||||
		Loading…
	
		Reference in New Issue
	
	 Junio C Hamano
						Junio C Hamano