mirror of
https://github.com/git/git.git
synced 2024-11-25 19:04:18 +08:00
f69e836fab
This fixes the remainder of the issues where the test script itself is at fault for failing when the git checkout path contains whitespace or other shell metacharacters. The majority of git svn tests used the idiom test_expect_success "title" "test script using $svnrepo" These were changed to have the test script in single-quotes: test_expect_success "title" 'test script using "$svnrepo"' which unfortunately makes the patch appear larger than it really is. One consequence of this change is that in the verbose test output the value of $svnrepo (and in some cases other variables, too) is no longer expanded, i.e. previously we saw * expecting success: test script using /path/to/git/t/trash/svnrepo but now it is: * expecting success: test script using "$svnrepo" Signed-off-by: Bryan Donlan <bdonlan@fushizen.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
183 lines
4.1 KiB
Bash
Executable File
183 lines
4.1 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)
|
|
eval "$name=$commit; export $name"
|
|
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 --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 --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 2>> log2.txt &&
|
|
git config transfer.unpacklimit 0
|
|
)
|
|
|
|
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_expect_success "clone shallow" 'git-clone --depth 2 "file://$(pwd)/." shallow'
|
|
|
|
(cd shallow; git count-objects -v) > count.shallow
|
|
|
|
test_expect_success "clone shallow object count" \
|
|
"test \"in-pack: 18\" = \"$(grep in-pack count.shallow)\""
|
|
|
|
count_output () {
|
|
sed -e '/^in-pack:/d' -e '/^packs:/d' -e '/: 0$/d' "$1"
|
|
}
|
|
|
|
test_expect_success "clone shallow object count (part 2)" '
|
|
test -z "$(count_output count.shallow)"
|
|
'
|
|
|
|
test_expect_success "fsck in shallow repo" \
|
|
"(cd shallow; git fsck --full)"
|
|
|
|
#test_done; exit
|
|
|
|
add B66 $B65
|
|
add B67 $B66
|
|
|
|
test_expect_success "pull in shallow repo" \
|
|
"(cd shallow; git pull .. B)"
|
|
|
|
(cd shallow; git count-objects -v) > count.shallow
|
|
test_expect_success "clone shallow object count" \
|
|
"test \"count: 6\" = \"$(grep count count.shallow)\""
|
|
|
|
add B68 $B67
|
|
add B69 $B68
|
|
|
|
test_expect_success "deepening pull in shallow repo" \
|
|
"(cd shallow; git pull --depth 4 .. B)"
|
|
|
|
(cd shallow; git count-objects -v) > count.shallow
|
|
test_expect_success "clone shallow object count" \
|
|
"test \"count: 12\" = \"$(grep count count.shallow)\""
|
|
|
|
test_expect_success "deepening fetch in shallow repo" \
|
|
"(cd shallow; git fetch --depth 4 .. A:A)"
|
|
|
|
(cd shallow; git count-objects -v) > count.shallow
|
|
test_expect_success "clone shallow object count" \
|
|
"test \"count: 18\" = \"$(grep count count.shallow)\""
|
|
|
|
test_expect_success "pull in shallow repo with missing merge base" \
|
|
"(cd shallow && ! git pull --depth 4 .. A)"
|
|
|
|
test_done
|