| #!/bin/sh | 
 |  | 
 | test_description='Revision traversal vs grafts and path limiter' | 
 |  | 
 | . ./test-lib.sh | 
 |  | 
 | test_expect_success setup ' | 
 | 	mkdir subdir && | 
 | 	echo >fileA fileA && | 
 | 	echo >subdir/fileB fileB && | 
 | 	git add fileA subdir/fileB && | 
 | 	git commit -a -m "Initial in one history." && | 
 | 	A0=`git rev-parse --verify HEAD` && | 
 |  | 
 | 	echo >fileA fileA modified && | 
 | 	git commit -a -m "Second in one history." && | 
 | 	A1=`git rev-parse --verify HEAD` && | 
 |  | 
 | 	echo >subdir/fileB fileB modified && | 
 | 	git commit -a -m "Third in one history." && | 
 | 	A2=`git rev-parse --verify HEAD` && | 
 |  | 
 | 	rm -f .git/refs/heads/master .git/index && | 
 |  | 
 | 	echo >fileA fileA again && | 
 | 	echo >subdir/fileB fileB again && | 
 | 	git add fileA subdir/fileB && | 
 | 	git commit -a -m "Initial in alternate history." && | 
 | 	B0=`git rev-parse --verify HEAD` && | 
 |  | 
 | 	echo >fileA fileA modified in alternate history && | 
 | 	git commit -a -m "Second in alternate history." && | 
 | 	B1=`git rev-parse --verify HEAD` && | 
 |  | 
 | 	echo >subdir/fileB fileB modified in alternate history && | 
 | 	git commit -a -m "Third in alternate history." && | 
 | 	B2=`git rev-parse --verify HEAD` && | 
 | 	: done | 
 | ' | 
 |  | 
 | check () { | 
 | 	type=$1 | 
 | 	shift | 
 |  | 
 | 	arg= | 
 | 	which=arg | 
 | 	rm -f test.expect | 
 | 	for a | 
 | 	do | 
 | 		if test "z$a" = z-- | 
 | 		then | 
 | 			which=expect | 
 | 			child= | 
 | 			continue | 
 | 		fi | 
 | 		if test "$which" = arg | 
 | 		then | 
 | 			arg="$arg$a " | 
 | 			continue | 
 | 		fi | 
 | 		if test "$type" = basic | 
 | 		then | 
 | 			echo "$a" | 
 | 		else | 
 | 			if test "z$child" != z | 
 | 			then | 
 | 				echo "$child $a" | 
 | 			fi | 
 | 			child="$a" | 
 | 		fi | 
 | 	done >test.expect | 
 | 	if test "$type" != basic && test "z$child" != z | 
 | 	then | 
 | 		echo >>test.expect $child | 
 | 	fi | 
 | 	if test $type = basic | 
 | 	then | 
 | 		git rev-list $arg >test.actual | 
 | 	elif test $type = parents | 
 | 	then | 
 | 		git rev-list --parents $arg >test.actual | 
 | 	elif test $type = parents-raw | 
 | 	then | 
 | 		git rev-list --parents --pretty=raw $arg | | 
 | 		sed -n -e 's/^commit //p' >test.actual | 
 | 	fi | 
 | 	diff test.expect test.actual | 
 | } | 
 |  | 
 | for type in basic parents parents-raw | 
 | do | 
 | 	test_expect_success 'without grafts' " | 
 | 		rm -f .git/info/grafts | 
 | 		check $type $B2 -- $B2 $B1 $B0 | 
 | 	" | 
 |  | 
 | 	test_expect_success 'with grafts' " | 
 | 		echo '$B0 $A2' >.git/info/grafts | 
 | 		check $type $B2 -- $B2 $B1 $B0 $A2 $A1 $A0 | 
 | 	" | 
 |  | 
 | 	test_expect_success 'without grafts, with pathlimit' " | 
 | 		rm -f .git/info/grafts | 
 | 		check $type $B2 subdir -- $B2 $B0 | 
 | 	" | 
 |  | 
 | 	test_expect_success 'with grafts, with pathlimit' " | 
 | 		echo '$B0 $A2' >.git/info/grafts | 
 | 		check $type $B2 subdir -- $B2 $B0 $A2 $A0 | 
 | 	" | 
 |  | 
 | done | 
 | test_done |