t / t5503-tagfollow.shon commit Merge branch 'sg/t3701-tighten-trace' into maint (9beaf81)
   1#!/bin/sh
   2
   3test_description='test automatic tag following'
   4
   5. ./test-lib.sh
   6
   7# End state of the repository:
   8#
   9#         T - tag1          S - tag2
  10#        /                 /
  11#   L - A ------ O ------ B
  12#    \   \                 \
  13#     \   C - origin/cat    \
  14#      origin/master         master
  15
  16test_expect_success setup '
  17        test_tick &&
  18        echo ichi >file &&
  19        git add file &&
  20        git commit -m L &&
  21        L=$(git rev-parse --verify HEAD) &&
  22
  23        (
  24                mkdir cloned &&
  25                cd cloned &&
  26                git init-db &&
  27                git remote add -f origin ..
  28        ) &&
  29
  30        test_tick &&
  31        echo A >file &&
  32        git add file &&
  33        git commit -m A &&
  34        A=$(git rev-parse --verify HEAD)
  35'
  36
  37U=UPLOAD_LOG
  38UPATH="$(pwd)/$U"
  39
  40test_expect_success 'setup expect' '
  41cat - <<EOF >expect
  42want $A
  43EOF
  44'
  45
  46get_needs () {
  47        test -s "$1" &&
  48        perl -alne '
  49                next unless $F[1] eq "upload-pack<";
  50                last if $F[2] eq "0000";
  51                print $F[2], " ", $F[3];
  52        ' "$1"
  53}
  54
  55test_expect_success 'fetch A (new commit : 1 connection)' '
  56        rm -f $U &&
  57        (
  58                cd cloned &&
  59                GIT_TRACE_PACKET=$UPATH git fetch &&
  60                test $A = $(git rev-parse --verify origin/master)
  61        ) &&
  62        get_needs $U >actual &&
  63        test_cmp expect actual
  64'
  65
  66test_expect_success "create tag T on A, create C on branch cat" '
  67        git tag -a -m tag1 tag1 $A &&
  68        T=$(git rev-parse --verify tag1) &&
  69
  70        git checkout -b cat &&
  71        echo C >file &&
  72        git add file &&
  73        git commit -m C &&
  74        C=$(git rev-parse --verify HEAD) &&
  75        git checkout master
  76'
  77
  78test_expect_success 'setup expect' '
  79cat - <<EOF >expect
  80want $C
  81want $T
  82EOF
  83'
  84
  85test_expect_success 'fetch C, T (new branch, tag : 1 connection)' '
  86        rm -f $U &&
  87        (
  88                cd cloned &&
  89                GIT_TRACE_PACKET=$UPATH git fetch &&
  90                test $C = $(git rev-parse --verify origin/cat) &&
  91                test $T = $(git rev-parse --verify tag1) &&
  92                test $A = $(git rev-parse --verify tag1^0)
  93        ) &&
  94        get_needs $U >actual &&
  95        test_cmp expect actual
  96'
  97
  98test_expect_success "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 'setup expect' '
 115cat - <<EOF >expect
 116want $B
 117want $S
 118EOF
 119'
 120
 121test_expect_success 'fetch B, S (commit and tag : 1 connection)' '
 122        rm -f $U &&
 123        (
 124                cd cloned &&
 125                GIT_TRACE_PACKET=$UPATH git fetch &&
 126                test $B = $(git rev-parse --verify origin/master) &&
 127                test $B = $(git rev-parse --verify tag2^0) &&
 128                test $S = $(git rev-parse --verify tag2)
 129        ) &&
 130        get_needs $U >actual &&
 131        test_cmp expect actual
 132'
 133
 134test_expect_success 'setup expect' '
 135cat - <<EOF >expect
 136want $B
 137want $S
 138EOF
 139'
 140
 141test_expect_success 'new clone fetch master and tags' '
 142        test_might_fail git branch -D cat &&
 143        rm -f $U &&
 144        (
 145                mkdir clone2 &&
 146                cd clone2 &&
 147                git init &&
 148                git remote add origin .. &&
 149                GIT_TRACE_PACKET=$UPATH git fetch &&
 150                test $B = $(git rev-parse --verify origin/master) &&
 151                test $S = $(git rev-parse --verify tag2) &&
 152                test $B = $(git rev-parse --verify tag2^0) &&
 153                test $T = $(git rev-parse --verify tag1) &&
 154                test $A = $(git rev-parse --verify tag1^0)
 155        ) &&
 156        get_needs $U >actual &&
 157        test_cmp expect actual
 158'
 159
 160test_done