summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--remote.c7
-rwxr-xr-xt/t6040-tracking-info.sh34
-rw-r--r--wt-status.c10
3 files changed, 42 insertions, 9 deletions
diff --git a/remote.c b/remote.c
index 87c8dd3..c972bf3 100644
--- a/remote.c
+++ b/remote.c
@@ -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 6f678a4..ba26cfe 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 4b1713e..c5e6817 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"));