diff options
-rw-r--r-- | remote.c | 7 | ||||
-rwxr-xr-x | t/t6040-tracking-info.sh | 34 | ||||
-rw-r--r-- | wt-status.c | 10 |
3 files changed, 42 insertions, 9 deletions
@@ -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; } @@ -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", diff --git a/t/t6040-tracking-info.sh b/t/t6040-tracking-info.sh index 6f678a4dc2..ba26cfe923 100755 --- a/t/t6040-tracking-info.sh +++ b/t/t6040-tracking-info.sh @@ -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 @@ -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' ' @@ -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 && @@ -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 @@ -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 && diff --git a/wt-status.c b/wt-status.c index 4b1713efb8..c5e68174f9 100644 --- a/wt-status.c +++ b/wt-status.c @@ -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; } @@ -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")); |