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