t6040-tracking-info.sh 5.16 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
#!/bin/sh

test_description='remote tracking stats'

. ./test-lib.sh

advance () {
	echo "$1" >"$1" &&
	git add "$1" &&
	test_tick &&
	git commit -m "$1"
}

test_expect_success setup '
	for i in a b c;
	do
		advance $i || break
	done &&
	git clone . test &&
	(
		cd test &&
		git checkout -b b1 origin &&
		git reset --hard HEAD^ &&
		advance d &&
		git checkout -b b2 origin &&
		git reset --hard b1 &&
		git checkout -b b3 origin &&
		git reset --hard HEAD^ &&
		git checkout -b b4 origin &&
		advance e &&
31 32 33 34
		advance f &&
		git checkout -b brokenbase origin &&
		git checkout -b b5 --track brokenbase &&
		advance g &&
35 36
		git branch -d brokenbase &&
		git checkout -b b6 origin
37 38
	) &&
	git checkout -b follower --track master &&
39
	advance h
40 41
'

42
script='s/^..\(b.\) *[0-9a-f]* \(.*\)$/\1 \2/p'
43
cat >expect <<\EOF
44 45 46 47 48 49
b1 [ahead 1, behind 1] d
b2 [ahead 1, behind 1] d
b3 [behind 1] b
b4 [ahead 2] f
b5 g
b6 c
50 51
EOF

52
test_expect_success 'branch -v' '
53 54 55 56 57
	(
		cd test &&
		git branch -v
	) |
	sed -n -e "$script" >actual &&
58
	test_i18ncmp expect actual
59 60
'

Michael J Gruber's avatar
Michael J Gruber committed
61
cat >expect <<\EOF
62 63 64 65 66 67
b1 [origin/master: ahead 1, behind 1] d
b2 [origin/master: ahead 1, behind 1] d
b3 [origin/master: behind 1] b
b4 [origin/master: ahead 2] f
b5 [brokenbase: gone] g
b6 [origin/master] c
Michael J Gruber's avatar
Michael J Gruber committed
68 69 70 71 72 73 74 75 76 77 78
EOF

test_expect_success 'branch -vv' '
	(
		cd test &&
		git branch -vv
	) |
	sed -n -e "$script" >actual &&
	test_i18ncmp expect actual
'

79
test_expect_success 'checkout (diverged from upstream)' '
80 81 82
	(
		cd test && git checkout b1
	) >actual &&
83
	test_i18ngrep "have 1 and 1 different" actual
84 85
'

86
test_expect_success 'checkout with local tracked branch' '
87
	git checkout master &&
Jonathan Nieder's avatar
Jonathan Nieder committed
88
	git checkout follower >actual &&
89
	test_i18ngrep "is ahead of" actual
90 91
'

92 93 94 95 96 97 98 99
test_expect_success 'checkout (upstream is gone)' '
	(
		cd test &&
		git checkout b5
	) >actual &&
	test_i18ngrep "is based on .*, but the upstream is gone." actual
'

100 101 102 103 104 105 106
test_expect_success 'checkout (up-to-date with upstream)' '
	(
		cd test && git checkout b6
	) >actual &&
	test_i18ngrep "Your branch is up-to-date with .origin/master" actual
'

107
test_expect_success 'status (diverged from upstream)' '
108 109 110 111
	(
		cd test &&
		git checkout b1 >/dev/null &&
		# reports nothing to commit
112
		test_must_fail git commit --dry-run
113
	) >actual &&
114
	test_i18ngrep "have 1 and 1 different" actual
115 116
'

117 118 119 120 121 122 123 124 125 126
test_expect_success 'status (upstream is gone)' '
	(
		cd test &&
		git checkout b5 >/dev/null &&
		# reports nothing to commit
		test_must_fail git commit --dry-run
	) >actual &&
	test_i18ngrep "is based on .*, but the upstream is gone." actual
'

127 128 129 130 131 132 133 134 135 136
test_expect_success 'status (up-to-date with upstream)' '
	(
		cd test &&
		git checkout b6 >/dev/null &&
		# reports nothing to commit
		test_must_fail git commit --dry-run
	) >actual &&
	test_i18ngrep "Your branch is up-to-date with .origin/master" actual
'

137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162
cat >expect <<\EOF
## b1...origin/master [ahead 1, behind 1]
EOF

test_expect_success 'status -s -b (diverged from upstream)' '
	(
		cd test &&
		git checkout b1 >/dev/null &&
		git status -s -b | head -1
	) >actual &&
	test_i18ncmp expect actual
'

cat >expect <<\EOF
## b5...brokenbase [gone]
EOF

test_expect_success 'status -s -b (upstream is gone)' '
	(
		cd test &&
		git checkout b5 >/dev/null &&
		git status -s -b | head -1
	) >actual &&
	test_i18ncmp expect actual
'

163 164 165 166 167 168 169 170 171 172 173 174 175
cat >expect <<\EOF
## b6...origin/master
EOF

test_expect_success 'status -s -b (up-to-date with upstream)' '
	(
		cd test &&
		git checkout b6 >/dev/null &&
		git status -s -b | head -1
	) >actual &&
	test_i18ncmp expect actual
'

176
test_expect_success 'fail to track lightweight tags' '
177 178
	git checkout master &&
	git tag light &&
179
	test_must_fail git branch --track lighttrack light >actual &&
180
	test_i18ngrep ! "set up to track" actual &&
181
	test_must_fail git checkout lighttrack
182
'
183

184
test_expect_success 'fail to track annotated tags' '
185 186
	git checkout master &&
	git tag -m heavy heavy &&
187
	test_must_fail git branch --track heavytrack heavy >actual &&
188
	test_i18ngrep ! "set up to track" actual &&
189
	test_must_fail git checkout heavytrack
190
'
Ilari Liusvaara's avatar
Ilari Liusvaara committed
191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211

test_expect_success 'setup tracking with branch --set-upstream on existing branch' '
	git branch from-master master &&
	test_must_fail git config branch.from-master.merge > actual &&
	git branch --set-upstream from-master master &&
	git config branch.from-master.merge > actual &&
	grep -q "^refs/heads/master$" actual
'

test_expect_success '--set-upstream does not change branch' '
	git branch from-master2 master &&
	test_must_fail git config branch.from-master2.merge > actual &&
	git rev-list from-master2 &&
	git update-ref refs/heads/from-master2 from-master2^ &&
	git rev-parse from-master2 >expect2 &&
	git branch --set-upstream from-master2 master &&
	git config branch.from-master.merge > actual &&
	git rev-parse from-master2 >actual2 &&
	grep -q "^refs/heads/master$" actual &&
	cmp expect2 actual2
'
212 213 214 215 216 217 218 219 220 221 222 223 224 225

test_expect_success '--set-upstream @{-1}' '
	git checkout from-master &&
	git checkout from-master2 &&
	git config branch.from-master2.merge > expect2 &&
	git branch --set-upstream @{-1} follower &&
	git config branch.from-master.merge > actual &&
	git config branch.from-master2.merge > actual2 &&
	git branch --set-upstream from-master follower &&
	git config branch.from-master.merge > expect &&
	test_cmp expect2 actual2 &&
	test_cmp expect actual
'

226
test_done