Re: [OT] Your branch is ahead of the tracked remote branch 'origin/master' by 50 commits.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Ingo Molnar <mingo@xxxxxxx> writes:

> * Bruce Stephens <bruce.stephens@xxxxxxxxx> wrote:
> ...
>> It feels logical for "git status" to offer the same information (when 
>> the information is appropriate).
>> 
>> [...]
>
> i have a tip-curr (shortcut: 'tc') scriptlet to answer the "where I am 
> amongst 100+ branches" question:

Perhaps like this, but be warned this is untested except for compilation
testing.

 builtin-checkout.c |   39 +++++++++++++++++++++------------------
 wt-status.c        |   22 ++++++++++++++++++++++
 2 files changed, 43 insertions(+), 18 deletions(-)

diff --git a/builtin-checkout.c b/builtin-checkout.c
index 93ea69b..2cbc39c 100644
--- a/builtin-checkout.c
+++ b/builtin-checkout.c
@@ -305,7 +305,7 @@ static int merge_working_tree(struct checkout_opts *opts,
 	return 0;
 }
 
-static void report_tracking(struct branch_info *new, struct checkout_opts *opts)
+void report_tracking(FILE *fp, const char *name, struct commit *commit)
 {
 	/*
 	 * We have switched to a new branch; is it building on
@@ -321,7 +321,7 @@ static void report_tracking(struct branch_info *new, struct checkout_opts *opts)
 	int rev_argc;
 	int num_ours, num_theirs;
 	const char *remote_msg;
-	struct branch *branch = branch_get(new->name);
+	struct branch *branch = branch_get(name);
 
 	/*
 	 * Nothing to report unless we are marked to build on top of
@@ -339,7 +339,7 @@ static void report_tracking(struct branch_info *new, struct checkout_opts *opts)
 		return;
 
 	theirs = lookup_commit(sha1);
-	ours = new->commit;
+	ours = commit;
 	if (!hashcmp(sha1, ours->object.sha1))
 		return; /* we are the same */
 
@@ -380,22 +380,25 @@ static void report_tracking(struct branch_info *new, struct checkout_opts *opts)
 	}
 
 	if (!num_theirs)
-		printf("Your branch is ahead of the tracked%s branch '%s' "
-		       "by %d commit%s.\n",
-		       remote_msg, base,
-		       num_ours, (num_ours == 1) ? "" : "s");
+		fprintf(fp,
+			"Your branch is ahead of the tracked%s branch '%s' "
+			"by %d commit%s.\n",
+			remote_msg, base,
+			num_ours, (num_ours == 1) ? "" : "s");
 	else if (!num_ours)
-		printf("Your branch is behind the tracked%s branch '%s' "
-		       "by %d commit%s,\n"
-		       "and can be fast-forwarded.\n",
-		       remote_msg, base,
-		       num_theirs, (num_theirs == 1) ? "" : "s");
+		fprintf(fp,
+			"Your branch is behind the tracked%s branch '%s' "
+			"by %d commit%s,\n"
+			"and can be fast-forwarded.\n",
+			remote_msg, base,
+			num_theirs, (num_theirs == 1) ? "" : "s");
 	else
-		printf("Your branch and the tracked%s branch '%s' "
-		       "have diverged,\nand respectively "
-		       "have %d and %d different commit(s) each.\n",
-		       remote_msg, base,
-		       num_ours, num_theirs);
+		fprintf(fp,
+			"Your branch and the tracked%s branch '%s' "
+			"have diverged,\nand respectively "
+			"have %d and %d different commit(s) each.\n",
+			remote_msg, base,
+			num_ours, num_theirs);
 }
 
 static void update_refs_for_switch(struct checkout_opts *opts,
@@ -441,7 +444,7 @@ static void update_refs_for_switch(struct checkout_opts *opts,
 	remove_branch_state();
 	strbuf_release(&msg);
 	if (!opts->quiet && (new->path || !strcmp(new->name, "HEAD")))
-		report_tracking(new, opts);
+		report_tracking(stdout, new->name, new->commit);
 }
 
 static int switch_branches(struct checkout_opts *opts, struct branch_info *new)
diff --git a/wt-status.c b/wt-status.c
index 28c9e63..e02171a 100644
--- a/wt-status.c
+++ b/wt-status.c
@@ -315,6 +315,26 @@ static void wt_status_print_verbose(struct wt_status *s)
 	run_diff_index(&rev, 1);
 }
 
+/* NEEDSWORK */
+extern void report_tracking(FILE *fp, const char *name, struct commit *commit);
+
+static void wt_status_print_tracking(struct wt_status *s)
+{
+	unsigned char sha1[20];
+	struct commit *commit;
+
+	assert(s->branch && !s->is_initial);
+
+	if (prefixcmp(s->branch, "refs/heads/") ||
+	    !resolve_ref(s->branch, sha1, 1, NULL))
+		return;
+	commit = lookup_commit(sha1);
+	if (!commit)
+		return;
+	fprintf(s->fp, "# ");
+	report_tracking(s->fp, s->branch + 11, commit);
+}
+
 void wt_status_print(struct wt_status *s)
 {
 	unsigned char sha1[20];
@@ -333,6 +353,8 @@ void wt_status_print(struct wt_status *s)
 		}
 		color_fprintf(s->fp, color(WT_STATUS_HEADER), "# ");
 		color_fprintf_ln(s->fp, branch_color, "%s%s", on_what, branch_name);
+		if (!s->is_initial)
+			wt_status_print_tracking(s);
 	}
 
 	if (s->is_initial) {
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux