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
 |