-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Implement a test for git-fetch-pack/git-upload-pack
This test provides a minimal example of what went wrong with the old git-fetch-pack (and now works beautifully). Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de> Signed-off-by: Junio C Hamano <junkio@cox.net>
- Loading branch information
Johannes Schindelin
authored and
Junio C Hamano
committed
Oct 29, 2005
1 parent
1baaae5
commit 6b17c67
Showing
1 changed file
with
136 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,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 Packing 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 |