Ingo Molnar <mingo@elte.hu> writes:
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@vger.kernel.org
More majordomo info at
http://vger.kernel.org/majordomo-info.html