 30fd3a5425
			
		
	
	30fd3a5425
	
	
	
		
			
			Signed-off-by: Clemens Buchacher <drizzd@aon.at> Signed-off-by: Junio C Hamano <gitster@pobox.com>
		
			
				
	
	
		
			194 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			194 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/sh
 | |
| 
 | |
| test_description='git-merge
 | |
| 
 | |
| Do not overwrite changes.'
 | |
| 
 | |
| . ./test-lib.sh
 | |
| 
 | |
| test_expect_success 'setup' '
 | |
| 	test_commit c0 c0.c &&
 | |
| 	test_commit c1 c1.c &&
 | |
| 	test_commit c1a c1.c "c1 a" &&
 | |
| 	git reset --hard c0 &&
 | |
| 	test_commit c2 c2.c &&
 | |
| 	git reset --hard c0 &&
 | |
| 	mkdir sub &&
 | |
| 	echo "sub/f" > sub/f &&
 | |
| 	mkdir sub2 &&
 | |
| 	echo "sub2/f" > sub2/f &&
 | |
| 	git add sub/f sub2/f &&
 | |
| 	git commit -m sub &&
 | |
| 	git tag sub &&
 | |
| 	echo "VERY IMPORTANT CHANGES" > important
 | |
| '
 | |
| 
 | |
| test_expect_success 'will not overwrite untracked file' '
 | |
| 	git reset --hard c1 &&
 | |
| 	cp important c2.c &&
 | |
| 	test_must_fail git merge c2 &&
 | |
| 	test_path_is_missing .git/MERGE_HEAD &&
 | |
| 	test_cmp important c2.c
 | |
| '
 | |
| 
 | |
| test_expect_success 'will overwrite tracked file' '
 | |
| 	git reset --hard c1 &&
 | |
| 	cp important c2.c &&
 | |
| 	git add c2.c &&
 | |
| 	git commit -m important &&
 | |
| 	git checkout c2
 | |
| '
 | |
| 
 | |
| test_expect_success 'will not overwrite new file' '
 | |
| 	git reset --hard c1 &&
 | |
| 	cp important c2.c &&
 | |
| 	git add c2.c &&
 | |
| 	test_must_fail git merge c2 &&
 | |
| 	test_path_is_missing .git/MERGE_HEAD &&
 | |
| 	test_cmp important c2.c
 | |
| '
 | |
| 
 | |
| test_expect_success 'will not overwrite staged changes' '
 | |
| 	git reset --hard c1 &&
 | |
| 	cp important c2.c &&
 | |
| 	git add c2.c &&
 | |
| 	rm c2.c &&
 | |
| 	test_must_fail git merge c2 &&
 | |
| 	test_path_is_missing .git/MERGE_HEAD &&
 | |
| 	git checkout c2.c &&
 | |
| 	test_cmp important c2.c
 | |
| '
 | |
| 
 | |
| test_expect_success 'will not overwrite removed file' '
 | |
| 	git reset --hard c1 &&
 | |
| 	git rm c1.c &&
 | |
| 	git commit -m "rm c1.c" &&
 | |
| 	cp important c1.c &&
 | |
| 	test_must_fail git merge c1a &&
 | |
| 	test_cmp important c1.c
 | |
| '
 | |
| 
 | |
| test_expect_success 'will not overwrite re-added file' '
 | |
| 	git reset --hard c1 &&
 | |
| 	git rm c1.c &&
 | |
| 	git commit -m "rm c1.c" &&
 | |
| 	cp important c1.c &&
 | |
| 	git add c1.c &&
 | |
| 	test_must_fail git merge c1a &&
 | |
| 	test_path_is_missing .git/MERGE_HEAD &&
 | |
| 	test_cmp important c1.c
 | |
| '
 | |
| 
 | |
| test_expect_success 'will not overwrite removed file with staged changes' '
 | |
| 	git reset --hard c1 &&
 | |
| 	git rm c1.c &&
 | |
| 	git commit -m "rm c1.c" &&
 | |
| 	cp important c1.c &&
 | |
| 	git add c1.c &&
 | |
| 	rm c1.c &&
 | |
| 	test_must_fail git merge c1a &&
 | |
| 	test_path_is_missing .git/MERGE_HEAD &&
 | |
| 	git checkout c1.c &&
 | |
| 	test_cmp important c1.c
 | |
| '
 | |
| 
 | |
| test_expect_failure 'will not overwrite unstaged changes in renamed file' '
 | |
| 	git reset --hard c1 &&
 | |
| 	git mv c1.c other.c &&
 | |
| 	git commit -m rename &&
 | |
| 	cp important other.c &&
 | |
| 	git merge c1a &&
 | |
| 	test_cmp important other.c
 | |
| '
 | |
| 
 | |
| test_expect_success 'will not overwrite untracked subtree' '
 | |
| 	git reset --hard c0 &&
 | |
| 	rm -rf sub &&
 | |
| 	mkdir -p sub/f &&
 | |
| 	cp important sub/f/important &&
 | |
| 	test_must_fail git merge sub &&
 | |
| 	test_path_is_missing .git/MERGE_HEAD &&
 | |
| 	test_cmp important sub/f/important
 | |
| '
 | |
| 
 | |
| cat >expect <<\EOF
 | |
| error: The following untracked working tree files would be overwritten by merge:
 | |
| 	sub
 | |
| 	sub2
 | |
| Please move or remove them before you can merge.
 | |
| Aborting
 | |
| EOF
 | |
| 
 | |
| test_expect_success 'will not overwrite untracked file in leading path' '
 | |
| 	git reset --hard c0 &&
 | |
| 	rm -rf sub &&
 | |
| 	cp important sub &&
 | |
| 	cp important sub2 &&
 | |
| 	test_must_fail git merge sub 2>out &&
 | |
| 	test_cmp out expect &&
 | |
| 	test_path_is_missing .git/MERGE_HEAD &&
 | |
| 	test_cmp important sub &&
 | |
| 	test_cmp important sub2 &&
 | |
| 	rm -f sub sub2
 | |
| '
 | |
| 
 | |
| test_expect_success SYMLINKS 'will not overwrite untracked symlink in leading path' '
 | |
| 	git reset --hard c0 &&
 | |
| 	rm -rf sub &&
 | |
| 	mkdir sub2 &&
 | |
| 	ln -s sub2 sub &&
 | |
| 	test_must_fail git merge sub &&
 | |
| 	test_path_is_missing .git/MERGE_HEAD
 | |
| '
 | |
| 
 | |
| test_expect_success SYMLINKS 'will not be confused by symlink in leading path' '
 | |
| 	git reset --hard c0 &&
 | |
| 	rm -rf sub &&
 | |
| 	ln -s sub2 sub &&
 | |
| 	git add sub &&
 | |
| 	git commit -m ln &&
 | |
| 	git checkout sub
 | |
| '
 | |
| 
 | |
| cat >expect <<\EOF
 | |
| error: Untracked working tree file 'c0.c' would be overwritten by merge.
 | |
| fatal: read-tree failed
 | |
| EOF
 | |
| 
 | |
| test_expect_success 'will not overwrite untracked file on unborn branch' '
 | |
| 	git reset --hard c0 &&
 | |
| 	git rm -fr . &&
 | |
| 	git checkout --orphan new &&
 | |
| 	cp important c0.c &&
 | |
| 	test_must_fail git merge c0 2>out &&
 | |
| 	test_i18ncmp out expect
 | |
| '
 | |
| 
 | |
| test_expect_success 'will not overwrite untracked file on unborn branch .git/MERGE_HEAD sanity etc.' '
 | |
| 	test_when_finished "rm c0.c" &&
 | |
| 	test_path_is_missing .git/MERGE_HEAD &&
 | |
| 	test_cmp important c0.c
 | |
| '
 | |
| 
 | |
| test_expect_success 'failed merge leaves unborn branch in the womb' '
 | |
| 	test_must_fail git rev-parse --verify HEAD
 | |
| '
 | |
| 
 | |
| test_expect_success 'set up unborn branch and content' '
 | |
| 	git symbolic-ref HEAD refs/heads/unborn &&
 | |
| 	rm -f .git/index &&
 | |
| 	echo foo > tracked-file &&
 | |
| 	git add tracked-file &&
 | |
| 	echo bar > untracked-file
 | |
| '
 | |
| 
 | |
| test_expect_success 'will not clobber WT/index when merging into unborn' '
 | |
| 	git merge master &&
 | |
| 	grep foo tracked-file &&
 | |
| 	git show :tracked-file >expect &&
 | |
| 	grep foo expect &&
 | |
| 	grep bar untracked-file
 | |
| '
 | |
| 
 | |
| test_done
 |