t / t6040-tracking-info.shon commit rebase: prepare to do generic housekeeping (f5f758a)
   1#!/bin/sh
   2
   3test_description='remote tracking stats'
   4
   5. ./test-lib.sh
   6
   7advance () {
   8        echo "$1" >"$1" &&
   9        git add "$1" &&
  10        test_tick &&
  11        git commit -m "$1"
  12}
  13
  14test_expect_success setup '
  15        for i in a b c;
  16        do
  17                advance $i || break
  18        done &&
  19        git clone . test &&
  20        (
  21                cd test &&
  22                git checkout -b b1 origin &&
  23                git reset --hard HEAD^ &&
  24                advance d &&
  25                git checkout -b b2 origin &&
  26                git reset --hard b1 &&
  27                git checkout -b b3 origin &&
  28                git reset --hard HEAD^ &&
  29                git checkout -b b4 origin &&
  30                advance e &&
  31                advance f
  32        ) &&
  33        git checkout -b follower --track master &&
  34        advance g
  35'
  36
  37script='s/^..\(b.\)[     0-9a-f]*\[\([^]]*\)\].*/\1 \2/p'
  38cat >expect <<\EOF
  39b1 ahead 1, behind 1
  40b2 ahead 1, behind 1
  41b3 behind 1
  42b4 ahead 2
  43EOF
  44
  45test_expect_success 'branch -v' '
  46        (
  47                cd test &&
  48                git branch -v
  49        ) |
  50        sed -n -e "$script" >actual &&
  51        test_i18ncmp expect actual
  52'
  53
  54cat >expect <<\EOF
  55b1 origin/master: ahead 1, behind 1
  56b2 origin/master: ahead 1, behind 1
  57b3 origin/master: behind 1
  58b4 origin/master: ahead 2
  59EOF
  60
  61test_expect_success 'branch -vv' '
  62        (
  63                cd test &&
  64                git branch -vv
  65        ) |
  66        sed -n -e "$script" >actual &&
  67        test_i18ncmp expect actual
  68'
  69
  70test_expect_success 'checkout' '
  71        (
  72                cd test && git checkout b1
  73        ) >actual &&
  74        test_i18ngrep "have 1 and 1 different" actual
  75'
  76
  77test_expect_success 'checkout with local tracked branch' '
  78        git checkout master &&
  79        git checkout follower >actual &&
  80        test_i18ngrep "is ahead of" actual
  81'
  82
  83test_expect_success 'status' '
  84        (
  85                cd test &&
  86                git checkout b1 >/dev/null &&
  87                # reports nothing to commit
  88                test_must_fail git commit --dry-run
  89        ) >actual &&
  90        test_i18ngrep "have 1 and 1 different" actual
  91'
  92
  93test_expect_success 'fail to track lightweight tags' '
  94        git checkout master &&
  95        git tag light &&
  96        test_must_fail git branch --track lighttrack light >actual &&
  97        test_i18ngrep ! "set up to track" actual &&
  98        test_must_fail git checkout lighttrack
  99'
 100
 101test_expect_success 'fail to track annotated tags' '
 102        git checkout master &&
 103        git tag -m heavy heavy &&
 104        test_must_fail git branch --track heavytrack heavy >actual &&
 105        test_i18ngrep ! "set up to track" actual &&
 106        test_must_fail git checkout heavytrack
 107'
 108
 109test_expect_success 'setup tracking with branch --set-upstream on existing branch' '
 110        git branch from-master master &&
 111        test_must_fail git config branch.from-master.merge > actual &&
 112        git branch --set-upstream from-master master &&
 113        git config branch.from-master.merge > actual &&
 114        grep -q "^refs/heads/master$" actual
 115'
 116
 117test_expect_success '--set-upstream does not change branch' '
 118        git branch from-master2 master &&
 119        test_must_fail git config branch.from-master2.merge > actual &&
 120        git rev-list from-master2 &&
 121        git update-ref refs/heads/from-master2 from-master2^ &&
 122        git rev-parse from-master2 >expect2 &&
 123        git branch --set-upstream from-master2 master &&
 124        git config branch.from-master.merge > actual &&
 125        git rev-parse from-master2 >actual2 &&
 126        grep -q "^refs/heads/master$" actual &&
 127        cmp expect2 actual2
 128'
 129
 130test_expect_success '--set-upstream @{-1}' '
 131        git checkout from-master &&
 132        git checkout from-master2 &&
 133        git config branch.from-master2.merge > expect2 &&
 134        git branch --set-upstream @{-1} follower &&
 135        git config branch.from-master.merge > actual &&
 136        git config branch.from-master2.merge > actual2 &&
 137        git branch --set-upstream from-master follower &&
 138        git config branch.from-master.merge > expect &&
 139        test_cmp expect2 actual2 &&
 140        test_cmp expect actual
 141'
 142
 143test_done