110 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			110 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
| #!/bin/sh
 | |
| 
 | |
| test_description='git rebase - test patch id computation'
 | |
| 
 | |
| . ./test-lib.sh
 | |
| 
 | |
| test_set_prereq NOT_EXPENSIVE
 | |
| test -n "$GIT_PATCHID_TIMING_TESTS" && test_set_prereq EXPENSIVE
 | |
| test -x /usr/bin/time && test_set_prereq USR_BIN_TIME
 | |
| 
 | |
| 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()
 | |
| {
 | |
| 	pr=$1
 | |
| 	nlines=$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 NOT_EXPENSIVE 500
 | |
| do_tests EXPENSIVE 50000
 | |
| 
 | |
| test_done
 |