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