summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Hostetler <jeffhost@microsoft.com>2018-01-09 18:50:17 +0000
committerJunio C Hamano <gitster@pobox.com>2018-01-24 13:48:39 -0800
commit3ca1897cc1a23f3ad140d759280b73ad7affe696 (patch)
treed87dbe219b1e528dd4acd9a6e2f113bc7b52c853
parentfd9b544a2991ad74d73ad1bc0af4d24f91a6802b (diff)
downloadgit-3ca1897cc1a23f3ad140d759280b73ad7affe696.tar.gz
status: update short status to respect --no-ahead-behind
Teach "git status --short --branch" to respect "--no-ahead-behind" parameter to skip computing ahead/behind counts for the branch and its upstream and just report '[different]'. Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rwxr-xr-xt/t6040-tracking-info.sh13
-rw-r--r--wt-status.c11
2 files changed, 20 insertions, 4 deletions
diff --git a/t/t6040-tracking-info.sh b/t/t6040-tracking-info.sh
index 8f17fd9da8..019022080b 100755
--- a/t/t6040-tracking-info.sh
+++ b/t/t6040-tracking-info.sh
@@ -147,6 +147,19 @@ test_expect_success 'status -s -b (diverged from upstream)' '
'
cat >expect <<\EOF
+## b1...origin/master [different]
+EOF
+
+test_expect_success 'status -s -b --no-ahead-behind (diverged from upstream)' '
+ (
+ cd test &&
+ git checkout b1 >/dev/null &&
+ git status -s -b --no-ahead-behind | head -1
+ ) >actual &&
+ test_i18ncmp expect actual
+'
+
+cat >expect <<\EOF
## b5...brokenbase [gone]
EOF
diff --git a/wt-status.c b/wt-status.c
index 7a560c16a7..13189614ae 100644
--- a/wt-status.c
+++ b/wt-status.c
@@ -1771,7 +1771,7 @@ static void wt_shortstatus_print_tracking(struct wt_status *s)
const char *base;
char *short_base;
const char *branch_name;
- int num_ours, num_theirs;
+ int num_ours, num_theirs, sti;
int upstream_is_gone = 0;
color_fprintf(s->fp, color(WT_STATUS_HEADER, s), "## ");
@@ -1797,8 +1797,9 @@ static void wt_shortstatus_print_tracking(struct wt_status *s)
color_fprintf(s->fp, branch_color_local, "%s", branch_name);
- if (stat_tracking_info(branch, &num_ours, &num_theirs, &base,
- AHEAD_BEHIND_FULL) < 0) {
+ sti = stat_tracking_info(branch, &num_ours, &num_theirs, &base,
+ s->ahead_behind_flags);
+ if (sti < 0) {
if (!base)
goto conclude;
@@ -1810,12 +1811,14 @@ static void wt_shortstatus_print_tracking(struct wt_status *s)
color_fprintf(s->fp, branch_color_remote, "%s", short_base);
free(short_base);
- if (!upstream_is_gone && !num_ours && !num_theirs)
+ if (!upstream_is_gone && !sti)
goto conclude;
color_fprintf(s->fp, header_color, " [");
if (upstream_is_gone) {
color_fprintf(s->fp, header_color, LABEL(N_("gone")));
+ } else if (s->ahead_behind_flags == AHEAD_BEHIND_QUICK) {
+ color_fprintf(s->fp, header_color, LABEL(N_("different")));
} else if (!num_ours) {
color_fprintf(s->fp, header_color, LABEL(N_("behind ")));
color_fprintf(s->fp, branch_color_remote, "%d", num_theirs);