git/t/t6040-tracking-info.sh
Michael J Gruber 5e6e2b487e Make local branches behave like remote branches when --tracked
This makes sure that local branches, when followed using --track, behave
the same as remote ones (e.g. differences being reported by git status
and git checkout). This fixes 1 known failure.

The fix is done within branch_get(): The first natural candidate,
namely remote_find_tracking(), does not have all the necessary info
because in general there is no remote struct for '.', and we don't want
one because it would show up in other places as well.

branch_get(), on the other hand, has access to merge_names[] (in
addition to merge[]) and therefore can set up the followed branch
easily.

Signed-off-by: Michael J Gruber <git@drmicha.warpmail.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2009-04-01 15:48:30 -07:00

79 lines
1.3 KiB
Bash
Executable File

#!/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 &&
advance f
) &&
git checkout -b follower --track master &&
advance g
'
script='s/^..\(b.\)[ 0-9a-f]*\[\([^]]*\)\].*/\1 \2/p'
cat >expect <<\EOF
b1 ahead 1, behind 1
b2 ahead 1, behind 1
b3 behind 1
b4 ahead 2
EOF
test_expect_success 'branch -v' '
(
cd test &&
git branch -v
) |
sed -n -e "$script" >actual &&
test_cmp expect actual
'
test_expect_success 'checkout' '
(
cd test && git checkout b1
) >actual &&
grep "have 1 and 1 different" actual
'
test_expect_success 'checkout with local tracked branch' '
git checkout master &&
git checkout follower >actual
grep "is ahead of" actual
'
test_expect_success 'status' '
(
cd test &&
git checkout b1 >/dev/null &&
# reports nothing to commit
test_must_fail git status
) >actual &&
grep "have 1 and 1 different" actual
'
test_done