100 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			100 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
| #!/bin/sh
 | |
| 
 | |
| test_description='git rebase - test patch id computation'
 | |
| 
 | |
| . ./test-lib.sh
 | |
| 
 | |
| count () {
 | |
| 	i=0
 | |
| 	while test $i -lt $1
 | |
| 	do
 | |
| 		echo "$i"
 | |
| 		i=$(($i+1))
 | |
| 	done
 | |
| }
 | |
| 
 | |
| scramble () {
 | |
| 	i=0
 | |
| 	while read x
 | |
| 	do
 | |
| 		if test $i -ne 0
 | |
| 		then
 | |
| 			echo "$x"
 | |
| 		fi
 | |
| 		i=$((($i+1) % 10))
 | |
| 	done <"$1" >"$1.new"
 | |
| 	mv -f "$1.new" "$1"
 | |
| }
 | |
| 
 | |
| run () {
 | |
| 	echo \$ "$@"
 | |
| 	/usr/bin/time "$@" >/dev/null
 | |
| }
 | |
| 
 | |
| test_expect_success 'setup' '
 | |
| 	git commit --allow-empty -m initial &&
 | |
| 	git tag root
 | |
| '
 | |
| 
 | |
| do_tests () {
 | |
| 	nlines=$1 pr=${2-}
 | |
| 
 | |
| 	test_expect_success $pr "setup: $nlines lines" "
 | |
| 		rm -f .gitattributes &&
 | |
| 		git checkout -q -f master &&
 | |
| 		git reset --hard root &&
 | |
| 		count $nlines >file &&
 | |
| 		git add file &&
 | |
| 		git commit -q -m initial &&
 | |
| 		git branch -f other &&
 | |
| 
 | |
| 		scramble file &&
 | |
| 		git add file &&
 | |
| 		git commit -q -m 'change big file' &&
 | |
| 
 | |
| 		git checkout -q other &&
 | |
| 		: >newfile &&
 | |
| 		git add newfile &&
 | |
| 		git commit -q -m 'add small file' &&
 | |
| 
 | |
| 		git cherry-pick master >/dev/null 2>&1
 | |
| 	"
 | |
| 
 | |
| 	test_debug "
 | |
| 		run git diff master^\!
 | |
| 	"
 | |
| 
 | |
| 	test_expect_success $pr 'setup attributes' "
 | |
| 		echo 'file binary' >.gitattributes
 | |
| 	"
 | |
| 
 | |
| 	test_debug "
 | |
| 		run git format-patch --stdout master &&
 | |
| 		run git format-patch --stdout --ignore-if-in-upstream master
 | |
| 	"
 | |
| 
 | |
| 	test_expect_success $pr 'detect upstream patch' '
 | |
| 		git checkout -q master &&
 | |
| 		scramble file &&
 | |
| 		git add file &&
 | |
| 		git commit -q -m "change big file again" &&
 | |
| 		git checkout -q other^{} &&
 | |
| 		git rebase master &&
 | |
| 		test_must_fail test -n "$(git rev-list master...HEAD~)"
 | |
| 	'
 | |
| 
 | |
| 	test_expect_success $pr 'do not drop patch' '
 | |
| 		git branch -f squashed master &&
 | |
| 		git checkout -q -f squashed &&
 | |
| 		git reset -q --soft HEAD~2 &&
 | |
| 		git commit -q -m squashed &&
 | |
| 		git checkout -q other^{} &&
 | |
| 		test_must_fail git rebase squashed &&
 | |
| 		rm -rf .git/rebase-apply
 | |
| 	'
 | |
| }
 | |
| 
 | |
| do_tests 500
 | |
| do_tests 50000 EXPENSIVE
 | |
| 
 | |
| test_done
 |