t / t5503-tagfollow.shon commit vcs-svn: avoid using ls command twice (43155cf)
   1#!/bin/sh
   2
   3test_description='test automatic tag following'
   4
   5. ./test-lib.sh
   6
   7if ! test_have_prereq NOT_MINGW; then
   8        say "GIT_DEBUG_SEND_PACK not supported - skipping tests"
   9fi
  10
  11# End state of the repository:
  12#
  13#         T - tag1          S - tag2
  14#        /                 /
  15#   L - A ------ O ------ B
  16#    \   \                 \
  17#     \   C - origin/cat    \
  18#      origin/master         master
  19
  20test_expect_success NOT_MINGW setup '
  21        test_tick &&
  22        echo ichi >file &&
  23        git add file &&
  24        git commit -m L &&
  25        L=$(git rev-parse --verify HEAD) &&
  26
  27        (
  28                mkdir cloned &&
  29                cd cloned &&
  30                git init-db &&
  31                git remote add -f origin ..
  32        ) &&
  33
  34        test_tick &&
  35        echo A >file &&
  36        git add file &&
  37        git commit -m A &&
  38        A=$(git rev-parse --verify HEAD)
  39'
  40
  41U=UPLOAD_LOG
  42
  43test_expect_success NOT_MINGW 'setup expect' '
  44cat - <<EOF >expect
  45#S
  46want $A
  47#E
  48EOF
  49'
  50
  51test_expect_success NOT_MINGW 'fetch A (new commit : 1 connection)' '
  52        rm -f $U &&
  53        (
  54                cd cloned &&
  55                GIT_DEBUG_SEND_PACK=3 git fetch 3>../$U &&
  56                test $A = $(git rev-parse --verify origin/master)
  57        ) &&
  58        test -s $U &&
  59        cut -d" " -f1,2 $U >actual &&
  60        test_cmp expect actual
  61'
  62
  63test_expect_success NOT_MINGW "create tag T on A, create C on branch cat" '
  64        git tag -a -m tag1 tag1 $A &&
  65        T=$(git rev-parse --verify tag1) &&
  66
  67        git checkout -b cat &&
  68        echo C >file &&
  69        git add file &&
  70        git commit -m C &&
  71        C=$(git rev-parse --verify HEAD) &&
  72        git checkout master
  73'
  74
  75test_expect_success NOT_MINGW 'setup expect' '
  76cat - <<EOF >expect
  77#S
  78want $C
  79want $T
  80#E
  81EOF
  82'
  83
  84test_expect_success NOT_MINGW 'fetch C, T (new branch, tag : 1 connection)' '
  85        rm -f $U &&
  86        (
  87                cd cloned &&
  88                GIT_DEBUG_SEND_PACK=3 git fetch 3>../$U &&
  89                test $C = $(git rev-parse --verify origin/cat) &&
  90                test $T = $(git rev-parse --verify tag1) &&
  91                test $A = $(git rev-parse --verify tag1^0)
  92        ) &&
  93        test -s $U &&
  94        cut -d" " -f1,2 $U >actual &&
  95        test_cmp expect actual
  96'
  97
  98test_expect_success NOT_MINGW "create commits O, B, tag S on B" '
  99        test_tick &&
 100        echo O >file &&
 101        git add file &&
 102        git commit -m O &&
 103
 104        test_tick &&
 105        echo B >file &&
 106        git add file &&
 107        git commit -m B &&
 108        B=$(git rev-parse --verify HEAD) &&
 109
 110        git tag -a -m tag2 tag2 $B &&
 111        S=$(git rev-parse --verify tag2)
 112'
 113
 114test_expect_success NOT_MINGW 'setup expect' '
 115cat - <<EOF >expect
 116#S
 117want $B
 118want $S
 119#E
 120EOF
 121'
 122
 123test_expect_success NOT_MINGW 'fetch B, S (commit and tag : 1 connection)' '
 124        rm -f $U &&
 125        (
 126                cd cloned &&
 127                GIT_DEBUG_SEND_PACK=3 git fetch 3>../$U &&
 128                test $B = $(git rev-parse --verify origin/master) &&
 129                test $B = $(git rev-parse --verify tag2^0) &&
 130                test $S = $(git rev-parse --verify tag2)
 131        ) &&
 132        test -s $U &&
 133        cut -d" " -f1,2 $U >actual &&
 134        test_cmp expect actual
 135'
 136
 137test_expect_success NOT_MINGW 'setup expect' '
 138cat - <<EOF >expect
 139#S
 140want $B
 141want $S
 142#E
 143EOF
 144'
 145
 146test_expect_success NOT_MINGW 'new clone fetch master and tags' '
 147        git branch -D cat
 148        rm -f $U
 149        (
 150                mkdir clone2 &&
 151                cd clone2 &&
 152                git init &&
 153                git remote add origin .. &&
 154                GIT_DEBUG_SEND_PACK=3 git fetch 3>../$U &&
 155                test $B = $(git rev-parse --verify origin/master) &&
 156                test $S = $(git rev-parse --verify tag2) &&
 157                test $B = $(git rev-parse --verify tag2^0) &&
 158                test $T = $(git rev-parse --verify tag1) &&
 159                test $A = $(git rev-parse --verify tag1^0)
 160        ) &&
 161        test -s $U &&
 162        cut -d" " -f1,2 $U >actual &&
 163        test_cmp expect actual
 164'
 165
 166test_done