t / t1090-sparse-checkout-scope.shon commit Merge branch 'tg/push-all-in-mirror-forbidden' (fe048e4)
   1#!/bin/sh
   2
   3test_description='sparse checkout scope tests'
   4
   5. ./test-lib.sh
   6
   7test_expect_success 'setup' '
   8        echo "initial" >a &&
   9        echo "initial" >b &&
  10        echo "initial" >c &&
  11        git add a b c &&
  12        git commit -m "initial commit"
  13'
  14
  15test_expect_success 'create feature branch' '
  16        git checkout -b feature &&
  17        echo "modified" >b &&
  18        echo "modified" >c &&
  19        git add b c &&
  20        git commit -m "modification"
  21'
  22
  23test_expect_success 'perform sparse checkout of master' '
  24        git config --local --bool core.sparsecheckout true &&
  25        echo "!/*" >.git/info/sparse-checkout &&
  26        echo "/a" >>.git/info/sparse-checkout &&
  27        echo "/c" >>.git/info/sparse-checkout &&
  28        git checkout master &&
  29        test_path_is_file a &&
  30        test_path_is_missing b &&
  31        test_path_is_file c
  32'
  33
  34test_expect_success 'merge feature branch into sparse checkout of master' '
  35        git merge feature &&
  36        test_path_is_file a &&
  37        test_path_is_missing b &&
  38        test_path_is_file c &&
  39        test "$(cat c)" = "modified"
  40'
  41
  42test_expect_success 'return to full checkout of master' '
  43        git checkout feature &&
  44        echo "/*" >.git/info/sparse-checkout &&
  45        git checkout master &&
  46        test_path_is_file a &&
  47        test_path_is_file b &&
  48        test_path_is_file c &&
  49        test "$(cat b)" = "modified"
  50'
  51
  52test_expect_success 'in partial clone, sparse checkout only fetches needed blobs' '
  53        test_create_repo server &&
  54        git clone "file://$(pwd)/server" client &&
  55
  56        test_config -C server uploadpack.allowfilter 1 &&
  57        test_config -C server uploadpack.allowanysha1inwant 1 &&
  58        echo a >server/a &&
  59        echo bb >server/b &&
  60        mkdir server/c &&
  61        echo ccc >server/c/c &&
  62        git -C server add a b c/c &&
  63        git -C server commit -m message &&
  64
  65        test_config -C client core.sparsecheckout 1 &&
  66        test_config -C client extensions.partialclone origin &&
  67        echo "!/*" >client/.git/info/sparse-checkout &&
  68        echo "/a" >>client/.git/info/sparse-checkout &&
  69        git -C client fetch --filter=blob:none origin &&
  70        git -C client checkout FETCH_HEAD &&
  71
  72        git -C client rev-list HEAD \
  73                --quiet --objects --missing=print >unsorted_actual &&
  74        (
  75                printf "?" &&
  76                git hash-object server/b &&
  77                printf "?" &&
  78                git hash-object server/c/c
  79        ) >unsorted_expect &&
  80        sort unsorted_actual >actual &&
  81        sort unsorted_expect >expect &&
  82        test_cmp expect actual
  83'
  84
  85test_done