Merge branch 'rs/archive-zip-raw-compression'
[gitweb.git] / t / t5500-fetch-pack.sh
index ce51692bb2b9ae221d11458a01ab8ef669f24659..d574085696e81522669119c9b7480ba4c682c968 100755 (executable)
@@ -125,16 +125,30 @@ test_expect_success 'single branch object count' '
        test_cmp expected count.singlebranch
 '
 
+test_expect_success 'single given branch clone' '
+       git clone --single-branch --branch A "file://$(pwd)/." branch-a &&
+       test_must_fail git --git-dir=branch-a/.git rev-parse origin/B
+'
+
+test_expect_success 'clone shallow depth 1' '
+       git clone --no-single-branch --depth 1 "file://$(pwd)/." shallow0 &&
+       test "`git --git-dir=shallow0/.git rev-list --count HEAD`" = 1
+'
+
 test_expect_success 'clone shallow' '
        git clone --no-single-branch --depth 2 "file://$(pwd)/." shallow
 '
 
+test_expect_success 'clone shallow depth count' '
+       test "`git --git-dir=shallow/.git rev-list --count HEAD`" = 2
+'
+
 test_expect_success 'clone shallow object count' '
        (
                cd shallow &&
                git count-objects -v
        ) > count.shallow &&
-       grep "^in-pack: 18" count.shallow
+       grep "^in-pack: 12" count.shallow
 '
 
 test_expect_success 'clone shallow object count (part 2)' '
@@ -251,12 +265,36 @@ test_expect_success 'additional simple shallow deepenings' '
        )
 '
 
+test_expect_success 'clone shallow depth count' '
+       test "`git --git-dir=shallow/.git rev-list --count HEAD`" = 11
+'
+
 test_expect_success 'clone shallow object count' '
        (
                cd shallow &&
                git count-objects -v
        ) > count.shallow &&
-       grep "^count: 52" count.shallow
+       grep "^count: 55" count.shallow
+'
+
+test_expect_success 'fetch --no-shallow on full repo' '
+       test_must_fail git fetch --noshallow
+'
+
+test_expect_success 'fetch --depth --no-shallow' '
+       (
+               cd shallow &&
+               test_must_fail git fetch --depth=1 --noshallow
+       )
+'
+
+test_expect_success 'turn shallow to complete repository' '
+       (
+               cd shallow &&
+               git fetch --unshallow &&
+               ! test -f .git/shallow &&
+               git fsck --full
+       )
 '
 
 test_expect_success 'clone shallow without --no-single-branch' '
@@ -268,7 +306,7 @@ test_expect_success 'clone shallow object count' '
                cd shallow2 &&
                git count-objects -v
        ) > count.shallow2 &&
-       grep "^in-pack: 6" count.shallow2
+       grep "^in-pack: 3" count.shallow2
 '
 
 test_expect_success 'clone shallow with --branch' '
@@ -276,7 +314,7 @@ test_expect_success 'clone shallow with --branch' '
 '
 
 test_expect_success 'clone shallow object count' '
-       echo "in-pack: 12" > count3.expected &&
+       echo "in-pack: 3" > count3.expected &&
        GIT_DIR=shallow3/.git git count-objects -v |
                grep "^in-pack" > count3.actual &&
        test_cmp count3.expected count3.actual
@@ -305,7 +343,7 @@ EOF
        GIT_DIR=shallow6/.git git tag -l >taglist.actual &&
        test_cmp taglist.expected taglist.actual &&
 
-       echo "in-pack: 7" > count6.expected &&
+       echo "in-pack: 4" > count6.expected &&
        GIT_DIR=shallow6/.git git count-objects -v |
                grep "^in-pack" > count6.actual &&
        test_cmp count6.expected count6.actual
@@ -320,10 +358,130 @@ EOF
        GIT_DIR=shallow7/.git git tag -l >taglist.actual &&
        test_cmp taglist.expected taglist.actual &&
 
-       echo "in-pack: 7" > count7.expected &&
+       echo "in-pack: 4" > count7.expected &&
        GIT_DIR=shallow7/.git git count-objects -v |
                grep "^in-pack" > count7.actual &&
        test_cmp count7.expected count7.actual
 '
 
+test_expect_success 'clone shallow with packed refs' '
+       git pack-refs --all &&
+       git clone --depth 1 --branch A "file://$(pwd)/." shallow8 &&
+       echo "in-pack: 4" > count8.expected &&
+       GIT_DIR=shallow8/.git git count-objects -v |
+               grep "^in-pack" > count8.actual &&
+       test_cmp count8.expected count8.actual
+'
+
+test_expect_success 'setup tests for the --stdin parameter' '
+       for head in C D E F
+       do
+               add $head
+       done &&
+       for head in A B C D E F
+       do
+               git tag $head $head
+       done &&
+       cat >input <<-\EOF
+       refs/heads/C
+       refs/heads/A
+       refs/heads/D
+       refs/tags/C
+       refs/heads/B
+       refs/tags/A
+       refs/heads/E
+       refs/tags/B
+       refs/tags/E
+       refs/tags/D
+       EOF
+       sort <input >expect &&
+       (
+               echo refs/heads/E &&
+               echo refs/tags/E &&
+               cat input
+       ) >input.dup
+'
+
+test_expect_success 'fetch refs from cmdline' '
+       (
+               cd client &&
+               git fetch-pack --no-progress .. $(cat ../input)
+       ) >output &&
+       cut -d " " -f 2 <output | sort >actual &&
+       test_cmp expect actual
+'
+
+test_expect_success 'fetch refs from stdin' '
+       (
+               cd client &&
+               git fetch-pack --stdin --no-progress .. <../input
+       ) >output &&
+       cut -d " " -f 2 <output | sort >actual &&
+       test_cmp expect actual
+'
+
+test_expect_success 'fetch mixed refs from cmdline and stdin' '
+       (
+               cd client &&
+               tail -n +5 ../input |
+               git fetch-pack --stdin --no-progress .. $(head -n 4 ../input)
+       ) >output &&
+       cut -d " " -f 2 <output | sort >actual &&
+       test_cmp expect actual
+'
+
+test_expect_success 'test duplicate refs from stdin' '
+       (
+       cd client &&
+       git fetch-pack --stdin --no-progress .. <../input.dup
+       ) >output &&
+       cut -d " " -f 2 <output | sort >actual &&
+       test_cmp expect actual
+'
+
+test_expect_success 'set up tests of missing reference' '
+       cat >expect-error <<-\EOF
+       error: no such remote ref refs/heads/xyzzy
+       EOF
+'
+
+test_expect_success 'test lonely missing ref' '
+       (
+               cd client &&
+               test_must_fail git fetch-pack --no-progress .. refs/heads/xyzzy
+       ) >/dev/null 2>error-m &&
+       test_cmp expect-error error-m
+'
+
+test_expect_success 'test missing ref after existing' '
+       (
+               cd client &&
+               test_must_fail git fetch-pack --no-progress .. refs/heads/A refs/heads/xyzzy
+       ) >/dev/null 2>error-em &&
+       test_cmp expect-error error-em
+'
+
+test_expect_success 'test missing ref before existing' '
+       (
+               cd client &&
+               test_must_fail git fetch-pack --no-progress .. refs/heads/xyzzy refs/heads/A
+       ) >/dev/null 2>error-me &&
+       test_cmp expect-error error-me
+'
+
+test_expect_success 'test --all, --depth, and explicit head' '
+       (
+               cd client &&
+               git fetch-pack --no-progress --all --depth=1 .. refs/heads/A
+       ) >out-adh 2>error-adh
+'
+
+test_expect_success 'test --all, --depth, and explicit tag' '
+       git tag OLDTAG refs/heads/B~5 &&
+       (
+               cd client &&
+               git fetch-pack --no-progress --all --depth=1 .. refs/tags/OLDTAG
+       ) >out-adt 2>error-adt
+'
+
 test_done