@matheusbsbs / matheus-bagliano / commits / 5e6e2b487e
Fork 0

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>

Michael J Gruber committed Apr 1, 2009 at 23:42 UTC 5e6e2b487e76066d03b4f5809dc6b44b1234519a
2 files changed +6 -3
remote.c
+5 -2
@@ -1170,8 +1170,9 @@ struct branch *branch_get(const char *name)
1170 for (i = 0; i < ret->merge_nr; i++) {
1171 ret->merge[i] = xcalloc(1, sizeof(**ret->merge));
1172 ret->merge[i]->src = xstrdup(ret->merge_name[i]);
1173 - remote_find_tracking(ret->remote,
1174 - ret->merge[i]);
1173 + if (remote_find_tracking(ret->remote, ret->merge[i])
1174 + && !strcmp(ret->remote_name, "."))
1175 + ret->merge[i]->dst = xstrdup(ret->merge_name[i]);
1176 }
1177 }
1178 }
@@ -1450,6 +1451,8 @@ int format_tracking_info(struct branch *branch, struct strbuf *sb)
1451 base = branch->merge[0]->dst;
1452 if (!prefixcmp(base, "refs/remotes/")) {
1453 base += strlen("refs/remotes/");
1454 + } else if (!prefixcmp(base, "refs/heads/")) {
1455 + base += strlen("refs/heads/");
1456 }
1457 if (!num_theirs)
1458 strbuf_addf(sb, "Your branch is ahead of '%s' "
t/t6040-tracking-info.sh
+1 -1
@@ -58,7 +58,7 @@ test_expect_success 'checkout' '
58 grep "have 1 and 1 different" actual
59 '
60
61 -test_expect_failure 'checkout with local tracked branch' '
61 +test_expect_success 'checkout with local tracked branch' '
62 git checkout master &&
63 git checkout follower >actual
64 grep "is ahead of" actual