 1010437d51
			
		
	
	1010437d51
	
	
	
		
			
			None of the variables seem to conflict, so local was unnecessary.
Also replaced ${var:pos:len} with the sed equivalent.
Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
		
	
		
			
				
	
	
		
			132 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			132 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/sh
 | |
| #
 | |
| # Copyright (c) 2005 Johannes Schindelin
 | |
| #
 | |
| 
 | |
| test_description='Testing multi_ack pack fetching
 | |
| 
 | |
| '
 | |
| . ./test-lib.sh
 | |
| 
 | |
| # Test fetch-pack/upload-pack pair.
 | |
| 
 | |
| # Some convenience functions
 | |
| 
 | |
| add () {
 | |
| 	name=$1
 | |
| 	text="$@"
 | |
| 	branch=`echo $name | sed -e 's/^\(.\).*$/\1/'`
 | |
| 	parents=""
 | |
| 
 | |
| 	shift
 | |
| 	while test $1; do
 | |
| 		parents="$parents -p $1"
 | |
| 		shift
 | |
| 	done
 | |
| 
 | |
| 	echo "$text" > test.txt
 | |
| 	git-update-index --add test.txt
 | |
| 	tree=$(git-write-tree)
 | |
| 	# make sure timestamps are in correct order
 | |
| 	sec=$(($sec+1))
 | |
| 	commit=$(echo "$text" | GIT_AUTHOR_DATE=$sec \
 | |
| 		git-commit-tree $tree $parents 2>>log2.txt)
 | |
| 	export $name=$commit
 | |
| 	echo $commit > .git/refs/heads/$branch
 | |
| 	eval ${branch}TIP=$commit
 | |
| }
 | |
| 
 | |
| count_objects () {
 | |
| 	ls .git/objects/??/* 2>>log2.txt | wc -l | tr -d " "
 | |
| }
 | |
| 
 | |
| test_expect_object_count () {
 | |
| 	message=$1
 | |
| 	count=$2
 | |
| 
 | |
| 	output="$(count_objects)"
 | |
| 	test_expect_success \
 | |
| 		"new object count $message" \
 | |
| 		"test $count = $output"
 | |
| }
 | |
| 
 | |
| pull_to_client () {
 | |
| 	number=$1
 | |
| 	heads=$2
 | |
| 	count=$3
 | |
| 	no_strict_count_check=$4
 | |
| 
 | |
| 	cd client
 | |
| 	test_expect_success "$number pull" \
 | |
| 		"git-fetch-pack -k -v .. $heads"
 | |
| 	case "$heads" in *A*) echo $ATIP > .git/refs/heads/A;; esac
 | |
| 	case "$heads" in *B*) echo $BTIP > .git/refs/heads/B;; esac
 | |
| 	git-symbolic-ref HEAD refs/heads/`echo $heads | sed -e 's/^\(.\).*$/\1/'`
 | |
| 
 | |
| 	test_expect_success "fsck" 'git-fsck-objects --full > fsck.txt 2>&1'
 | |
| 
 | |
| 	test_expect_success 'check downloaded results' \
 | |
| 	'mv .git/objects/pack/pack-* . &&
 | |
| 	 p=`ls -1 pack-*.pack` &&
 | |
| 	 git-unpack-objects <$p &&
 | |
| 	 git-fsck-objects --full'
 | |
| 
 | |
| 	test_expect_success "new object count after $number pull" \
 | |
| 	'idx=`echo pack-*.idx` &&
 | |
| 	 pack_count=`git-show-index <$idx | wc -l` &&
 | |
| 	 test $pack_count = $count'
 | |
| 	test -z "$pack_count" && pack_count=0
 | |
| 	if [ -z "$no_strict_count_check" ]; then
 | |
| 		test_expect_success "minimal count" "test $count = $pack_count"
 | |
| 	else
 | |
| 		test $count != $pack_count && \
 | |
| 			echo "WARNING: $pack_count objects transmitted, only $count of which were needed"
 | |
| 	fi
 | |
| 	rm -f pack-*
 | |
| 	cd ..
 | |
| }
 | |
| 
 | |
| # Here begins the actual testing
 | |
| 
 | |
| # A1 - ... - A20 - A21
 | |
| #    \
 | |
| #      B1  -   B2 - .. - B70
 | |
| 
 | |
| # client pulls A20, B1. Then tracks only B. Then pulls A.
 | |
| 
 | |
| (
 | |
| 	mkdir client &&
 | |
| 	cd client &&
 | |
| 	git-init-db 2>> log2.txt
 | |
| )
 | |
| 
 | |
| add A1
 | |
| 
 | |
| prev=1; cur=2; while [ $cur -le 10 ]; do
 | |
| 	add A$cur $(eval echo \$A$prev)
 | |
| 	prev=$cur
 | |
| 	cur=$(($cur+1))
 | |
| done
 | |
| 
 | |
| add B1 $A1
 | |
| 
 | |
| echo $ATIP > .git/refs/heads/A
 | |
| echo $BTIP > .git/refs/heads/B
 | |
| git-symbolic-ref HEAD refs/heads/B
 | |
| 
 | |
| pull_to_client 1st "B A" $((11*3))
 | |
| 
 | |
| add A11 $A10
 | |
| 
 | |
| prev=1; cur=2; while [ $cur -le 65 ]; do
 | |
| 	add B$cur $(eval echo \$B$prev)
 | |
| 	prev=$cur
 | |
| 	cur=$(($cur+1))
 | |
| done
 | |
| 
 | |
| pull_to_client 2nd "B" $((64*3))
 | |
| 
 | |
| pull_to_client 3rd "A" $((1*3)) # old fails
 | |
| 
 | |
| test_done
 |