t / t5547-push-quarantine.shon commit test-reach: test get_merge_bases_many (324dec0)
   1#!/bin/sh
   2
   3test_description='check quarantine of objects during push'
   4. ./test-lib.sh
   5
   6test_expect_success 'create picky dest repo' '
   7        git init --bare dest.git &&
   8        write_script dest.git/hooks/pre-receive <<-\EOF
   9        while read old new ref; do
  10                test "$(git log -1 --format=%s $new)" = reject && exit 1
  11        done
  12        exit 0
  13        EOF
  14'
  15
  16test_expect_success 'accepted objects work' '
  17        test_commit ok &&
  18        git push dest.git HEAD &&
  19        commit=$(git rev-parse HEAD) &&
  20        git --git-dir=dest.git cat-file commit $commit
  21'
  22
  23test_expect_success 'rejected objects are not installed' '
  24        test_commit reject &&
  25        commit=$(git rev-parse HEAD) &&
  26        test_must_fail git push dest.git reject &&
  27        test_must_fail git --git-dir=dest.git cat-file commit $commit
  28'
  29
  30test_expect_success 'rejected objects are removed' '
  31        echo "incoming-*" >expect &&
  32        (cd dest.git/objects && echo incoming-*) >actual &&
  33        test_cmp expect actual
  34'
  35
  36test_expect_success 'push to repo path with path separator (colon)' '
  37        # The interesting failure case here is when the
  38        # receiving end cannot access its original object directory,
  39        # so make it likely for us to generate a delta by having
  40        # a non-trivial file with multiple versions.
  41
  42        test-tool genrandom foo 4096 >file.bin &&
  43        git add file.bin &&
  44        git commit -m bin &&
  45
  46        if test_have_prereq MINGW
  47        then
  48                pathsep=";"
  49        else
  50                pathsep=":"
  51        fi &&
  52        git clone --bare . "xxx${pathsep}yyy.git" &&
  53
  54        echo change >>file.bin &&
  55        git commit -am change &&
  56        # Note that we have to use the full path here, or it gets confused
  57        # with the ssh host:path syntax.
  58        git push "$(pwd)/xxx${pathsep}yyy.git" HEAD
  59'
  60
  61test_expect_success 'updating a ref from quarantine is forbidden' '
  62        git init --bare update.git &&
  63        write_script update.git/hooks/pre-receive <<-\EOF &&
  64        read old new refname
  65        git update-ref refs/heads/unrelated $new
  66        exit 1
  67        EOF
  68        test_must_fail git push update.git HEAD &&
  69        git -C update.git fsck
  70'
  71
  72test_done