1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
|
#!/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
|