git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [RFC] status: show tracking branch even no difference
@ 2013-08-07 15:42 Jiang Xin
  2013-08-07 15:50 ` Matthieu Moy
  0 siblings, 1 reply; 36+ messages in thread
From: Jiang Xin @ 2013-08-07 15:42 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Git List, Jiang Xin

If the current branch has an upstream branch, and there are differences
between the current branch and its upstream, some commands (such as
"git status", "git status -bs", and "git checkout") will report their
relationship. E.g.

    $ git status
    # On branch master
    # Your branch is ahead of 'origin/master' by 1 commit.
    #   (use "git push" to publish your local commits)
    #
    ...

    $ git status -bs
    ## master...origin/master [ahead 1]
    ...

    $ git checkout master
    Already on 'master'
    Your branch is ahead of 'origin/master' by 1 commit.
      (use "git push" to publish your local commits)

But if there is no difference between the current branch and its
upstream, the relationship will not be reported, and it's hard to
tell whether the current branch has a tracking branch or not. And
what's worse, when the 'push.default' config variable is set to
`matching`, it's hard to tell whether current branch is pushed out
or not [1].

With this patch, "git status" will report relationship between current
branch and its upstream counterpart even if there is no difference.

    $ git status
    # On branch master
    # Your branch is identical to its tracking branch: 'origin/master'.
    #
    ...

    $ git status -bs
    ## master...origin/master
    ...

    $ git checkout master
    Already on 'master'
    Your branch is identical to its tracking branch: 'origin/master'.

[1]: http://thread.gmane.org/gmane.comp.version-control.git/198703

Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
---
 remote.c    | 22 ++++++++++++++++------
 wt-status.c | 13 ++++++++++---
 2 files changed, 26 insertions(+), 9 deletions(-)

diff --git a/remote.c b/remote.c
index 2433467..8d6f278 100644
--- a/remote.c
+++ b/remote.c
@@ -1740,6 +1740,10 @@ int stat_tracking_info(struct branch *branch, int *num_ours, int *num_theirs)
 	const char *rev_argv[10], *base;
 	int rev_argc;
 
+	/* Set both num_theirs and num_ours as undetermined. */
+	*num_theirs = -1;
+	*num_ours = -1;
+
 	/*
 	 * Nothing to report unless we are marked to build on top of
 	 * somebody else.
@@ -1758,14 +1762,16 @@ int stat_tracking_info(struct branch *branch, int *num_ours, int *num_theirs)
 	theirs = lookup_commit_reference(sha1);
 	if (!theirs)
 		return 0;
+	*num_theirs = 0;
 
 	if (read_ref(branch->refname, sha1))
 		return 0;
 	ours = lookup_commit_reference(sha1);
 	if (!ours)
 		return 0;
+	*num_ours = 0;
 
-	/* are we the same? */
+	/* are we the same? both num_theirs and num_ours are set to 0. */
 	if (theirs == ours)
 		return 0;
 
@@ -1786,8 +1792,6 @@ int stat_tracking_info(struct branch *branch, int *num_ours, int *num_theirs)
 	prepare_revision_walk(&revs);
 
 	/* ... and count the commits on each side. */
-	*num_ours = 0;
-	*num_theirs = 0;
 	while (1) {
 		struct commit *c = get_revision(&revs);
 		if (!c)
@@ -1812,12 +1816,18 @@ int format_tracking_info(struct branch *branch, struct strbuf *sb)
 	int num_ours, num_theirs;
 	const char *base;
 
-	if (!stat_tracking_info(branch, &num_ours, &num_theirs))
-		return 0;
+	if (!stat_tracking_info(branch, &num_ours, &num_theirs)) {
+		if (num_ours || num_theirs)
+			return 0;
+	}
 
 	base = branch->merge[0]->dst;
 	base = shorten_unambiguous_ref(base, 0);
-	if (!num_theirs) {
+	if (!num_ours && !num_theirs) {
+		strbuf_addf(sb,
+			_("Your branch is identical to its tracking branch: '%s'.\n"),
+			base);
+	} else if (!num_theirs) {
 		strbuf_addf(sb,
 			Q_("Your branch is ahead of '%s' by %d commit.\n",
 			   "Your branch is ahead of '%s' by %d commits.\n",
diff --git a/wt-status.c b/wt-status.c
index ff4b324..56f3c19 100644
--- a/wt-status.c
+++ b/wt-status.c
@@ -1381,9 +1381,11 @@ static void wt_shortstatus_print_tracking(struct wt_status *s)
 	if (s->is_initial)
 		color_fprintf(s->fp, header_color, _("Initial commit on "));
 	if (!stat_tracking_info(branch, &num_ours, &num_theirs)) {
-		color_fprintf(s->fp, branch_color_local, "%s", branch_name);
-		fputc(s->null_termination ? '\0' : '\n', s->fp);
-		return;
+		if (num_ours || num_theirs) {
+			color_fprintf(s->fp, branch_color_local, "%s", branch_name);
+			fputc(s->null_termination ? '\0' : '\n', s->fp);
+			return;
+		}
 	}
 
 	base = branch->merge[0]->dst;
@@ -1392,6 +1394,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 (!num_ours && !num_theirs) {
+		fputc(s->null_termination ? '\0' : '\n', s->fp);
+		return;
+	}
+
 	color_fprintf(s->fp, header_color, " [");
 	if (!num_ours) {
 		color_fprintf(s->fp, header_color, _("behind "));
-- 
1.8.4.rc1.429.g46fb194

^ permalink raw reply related	[flat|nested] 36+ messages in thread

end of thread, other threads:[~2013-08-26 16:09 UTC | newest]

Thread overview: 36+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-08-07 15:42 [RFC] status: show tracking branch even no difference Jiang Xin
2013-08-07 15:50 ` Matthieu Moy
2013-08-07 16:03   ` Jiang Xin
2013-08-08  5:40   ` [PATCH v2] status: always show tracking branch even no change Jiang Xin
2013-08-08 14:49     ` [PATCH v3] " Jiang Xin
2013-08-08 14:49     ` Jiang Xin
2013-08-09 21:18       ` Junio C Hamano
2013-08-10 15:05         ` Jiang Xin
2013-08-12  6:15           ` Junio C Hamano
2013-08-13  4:49             ` Jiang Xin
2013-08-13  4:53               ` [PATCH v5 1/2] branch: not report invalid tracking branch Jiang Xin
2013-08-14 15:21                 ` Junio C Hamano
2013-08-15  2:14                   ` Jiang Xin
2013-08-14 15:38                 ` Junio C Hamano
2013-08-15 18:11                   ` [PATCH v6 1/3] " Jiang Xin
2013-08-15 18:11                   ` [PATCH v6 2/3] branch: report invalid tracking branch as broken Jiang Xin
2013-08-15 18:38                     ` Junio C Hamano
2013-08-15 22:54                     ` Junio C Hamano
2013-08-16  2:29                       ` [PATCH v7 0/3] some enhancements for reporting branch tracking info Jiang Xin
2013-08-18 19:51                         ` Junio C Hamano
2013-08-19  0:38                           ` Jiang Xin
2013-08-26  7:02                           ` [PATCH v8 0/2] " Jiang Xin
2013-08-26  7:21                             ` Junio C Hamano
2013-08-26  7:02                           ` [PATCH v8 1/2] branch: report invalid tracking branch as gone Jiang Xin
2013-08-26  7:02                           ` [PATCH v8 2/2] status: always show tracking branch even no change Jiang Xin
2013-08-26  7:47                             ` Jeremy Rosen
2013-08-26  8:04                               ` Jiang Xin
2013-08-26 16:08                                 ` Junio C Hamano
     [not found]                       ` <cover.1376620130.git.worldhello.net@gmail.com>
2013-08-16  2:29                         ` [PATCH v7 1/3] branch: not report invalid tracking branch Jiang Xin
2013-08-16  2:29                         ` [PATCH v7 2/3] branch: mark missing tracking branch as gone Jiang Xin
2013-08-21  7:37                           ` Matthieu Moy
2013-08-22  0:00                             ` Jiang Xin
2013-08-16  2:29                         ` [PATCH v7 3/3] status: always show tracking branch even no change Jiang Xin
2013-08-15 18:11                   ` [PATCH v6 " Jiang Xin
2013-08-15 22:56                     ` Junio C Hamano
2013-08-13  4:53               ` [PATCH v5 2/2] " Jiang Xin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).