Skip to content

Commit

Permalink
status: always show tracking branch even no change
Browse files Browse the repository at this point in the history
In order to see what the current branch is tracking, one way is using
"git branch -v -v", but branches other than the current are also
reported. Another way is using "git status", such as:

    $ git status
    # On branch master
    # Your branch is ahead of 'origin/master' by 1 commit.
    ...

But this will not work if there is no change between the current
branch and its upstream. Always report upstream tracking info
even if there is no difference, so that "git status" is consistent
for checking tracking info for current branch. E.g.

    $ git status
    # On branch feature1
    # Your branch is up-to-date with 'github/feature1'.
    ...

    $ git status -bs
    ## feature1...github/feature1
    ...

    $ git checkout feature1
    Already on 'feature1'
    Your branch is up-to-date with 'github/feature1'.
    ...

Also add some test cases in t6040.

Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Jiang Xin authored and Junio C Hamano committed Aug 26, 2013
1 parent f2e0873 commit f223459
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 9 deletions.
7 changes: 4 additions & 3 deletions remote.c
Original file line number Diff line number Diff line change
Expand Up @@ -1788,9 +1788,6 @@ int format_tracking_info(struct branch *branch, struct strbuf *sb)
upstream_is_gone = 1;
break;
default:
/* Nothing to report if neither side has changes. */
if (!ours && !theirs)
return 0;
/* with base */
break;
}
Expand All @@ -1804,6 +1801,10 @@ int format_tracking_info(struct branch *branch, struct strbuf *sb)
if (advice_status_hints)
strbuf_addf(sb,
_(" (use \"git branch --unset-upstream\" to fixup)\n"));
} else if (!ours && !theirs) {
strbuf_addf(sb,
_("Your branch is up-to-date with '%s'.\n"),
base);
} else if (!theirs) {
strbuf_addf(sb,
Q_("Your branch is ahead of '%s' by %d commit.\n",
Expand Down
34 changes: 33 additions & 1 deletion t/t6040-tracking-info.sh
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,8 @@ test_expect_success setup '
git checkout -b brokenbase origin &&
git checkout -b b5 --track brokenbase &&
advance g &&
git branch -d brokenbase
git branch -d brokenbase &&
git checkout -b b6 origin
) &&
git checkout -b follower --track master &&
advance h
Expand Down Expand Up @@ -61,6 +62,7 @@ b2 origin/master: ahead 1, behind 1
b3 origin/master: behind 1
b4 origin/master: ahead 2
b5 brokenbase: gone
b6 origin/master
EOF

test_expect_success 'branch -vv' '
Expand Down Expand Up @@ -93,6 +95,13 @@ test_expect_success 'checkout (upstream is gone)' '
test_i18ngrep "is based on .*, but the upstream is gone." actual
'

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
'

test_expect_success 'status (diverged from upstream)' '
(
cd test &&
Expand All @@ -113,6 +122,16 @@ test_expect_success 'status (upstream is gone)' '
test_i18ngrep "is based on .*, but the upstream is gone." actual
'

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
'

cat >expect <<\EOF
## b1...origin/master [ahead 1, behind 1]
EOF
Expand All @@ -139,6 +158,19 @@ test_expect_success 'status -s -b (upstream is gone)' '
test_i18ncmp expect actual
'

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
'

test_expect_success 'fail to track lightweight tags' '
git checkout master &&
git tag light &&
Expand Down
10 changes: 5 additions & 5 deletions wt-status.c
Original file line number Diff line number Diff line change
Expand Up @@ -1396,11 +1396,6 @@ static void wt_shortstatus_print_tracking(struct wt_status *s)
upstream_is_gone = 1;
break;
default:
/* Stop reporting if neither side has changes. */
if (!num_ours && !num_theirs) {
fputc(s->null_termination ? '\0' : '\n', s->fp);
return;
}
/* with base */
break;
}
Expand All @@ -1410,6 +1405,11 @@ static void wt_shortstatus_print_tracking(struct wt_status *s)
color_fprintf(s->fp, header_color, "...");
color_fprintf(s->fp, branch_color_remote, "%s", base);

if (!upstream_is_gone && !num_ours && !num_theirs) {
fputc(s->null_termination ? '\0' : '\n', s->fp);
return;
}

color_fprintf(s->fp, header_color, " [");
if (upstream_is_gone) {
color_fprintf(s->fp, header_color, _("gone"));
Expand Down

0 comments on commit f223459

Please sign in to comment.