blob: e15e14fc32fd748f1dd62c1a9507aa4f08288d0a (
plain)
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
132
133
134
135
136
|
#!/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
function show_count () {
commit_count=$(($commit_count+1))
printf " %d\r" $commit_count
}
function add () {
local name=$1
local text="$@"
local branch=${name:0:1}
local 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
}
function count_objects () {
ls .git/objects/??/* 2>>log2.txt | wc -l | tr -d " "
}
function test_expect_object_count () {
local message=$1
local count=$2
output="$(count_objects)"
test_expect_success \
"new object count $message" \
"test $count = $output"
}
function test_repack () {
local rep=$1
test_expect_success "repack && prune-packed in $rep" \
'(git-repack && git-prune-packed)2>>log.txt'
}
function pull_to_client () {
local number=$1
local heads=$2
local count=$3
local no_strict_count_check=$4
cd client
test_expect_success "$number pull" \
"git-fetch-pack -v .. $heads > log.txt 2>&1"
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/${heads:0:1}
test_expect_success "fsck" 'git-fsck-objects --full > fsck.txt 2>&1'
test_expect_object_count "after $number pull" $count
pack_count=$(grep Unpacking log.txt|tr -dc "0-9")
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
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))
(cd client; test_repack client)
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))
(cd client; test_repack client)
pull_to_client 3rd "A" $((1*3)) # old fails
test_done
|