Code

Ensure git-repack -a -d --max-pack-size=N deletes correct packs
[git.git] / t / t5500-fetch-pack.sh
index e15e14fc32fd748f1dd62c1a9507aa4f08288d0a..48e3d1705f5e4bc7f206692276b4e3e1fe1ddf66 100755 (executable)
@@ -12,16 +12,11 @@ test_description='Testing multi_ack pack fetching
 
 # 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=""
+add () {
+       name=$1
+       text="$@"
+       branch=`echo $name | sed -e 's/^\(.\).*$/\1/'`
+       parents=""
 
        shift
        while test $1; do
@@ -41,13 +36,13 @@ function add () {
        eval ${branch}TIP=$commit
 }
 
-function count_objects () {
+count_objects () {
        ls .git/objects/??/* 2>>log2.txt | wc -l | tr -d " "
 }
 
-function test_expect_object_count () {
-       local message=$1
-       local count=$2
+test_expect_object_count () {
+       message=$1
+       count=$2
 
        output="$(count_objects)"
        test_expect_success \
@@ -55,28 +50,31 @@ function test_expect_object_count () {
                "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
+pull_to_client () {
+       number=$1
+       heads=$2
+       count=$3
+       no_strict_count_check=$4
 
        cd client
        test_expect_success "$number pull" \
-               "git-fetch-pack -v .. $heads > log.txt 2>&1"
+               "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/${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")
+       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"
@@ -84,6 +82,7 @@ function pull_to_client () {
                test $count != $pack_count && \
                        echo "WARNING: $pack_count objects transmitted, only $count of which were needed"
        fi
+       rm -f pack-*
        cd ..
 }
 
@@ -98,7 +97,8 @@ function pull_to_client () {
 (
        mkdir client &&
        cd client &&
-       git-init-db 2>> log2.txt
+       git-init 2>> log2.txt &&
+       git config transfer.unpacklimit 0
 )
 
 add A1
@@ -117,8 +117,6 @@ 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
@@ -129,8 +127,56 @@ done
 
 pull_to_client 2nd "B" $((64*3))
 
-(cd client; test_repack client)
-
 pull_to_client 3rd "A" $((1*3)) # old fails
 
+test_expect_success "clone shallow" "git-clone --depth 2 . 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_failure "pull in shallow repo with missing merge base" \
+       "(cd shallow; git pull --depth 4 .. A)"
+
 test_done