This provides the same information as the git bash prompt about the current operation that is going on: rebase, merge, am, cherry-pick or bisect. This is very useful for "beginners" who don't have their shell prompt set up for git. The logic has been largely borrowed from contrib/completion/git-completion.bash Signed-off-by: Pierre Habouzit <madcoder@xxxxxxxxxx> --- wt-status.c | 74 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 74 insertions(+), 0 deletions(-) diff --git a/wt-status.c b/wt-status.c index 9f4e0ba..aad0f7f 100644 --- a/wt-status.c +++ b/wt-status.c @@ -527,6 +527,79 @@ static void wt_status_print_unmerged(struct wt_status *s) } +static int wt_has_file(const char *what) +{ + char path[PATH_MAX]; + + return access(git_snpath(path, sizeof(path), "%s", what), F_OK) == 0; +} + +static void wt_status_print_doingwhat(struct wt_status *s) +{ + const char *status_header = color(WT_STATUS_HEADER, s); + const char *status_nobranch = color(WT_STATUS_NOBRANCH, s); + struct strbuf sb = STRBUF_INIT; + char path[PATH_MAX]; + + if (wt_has_file("rebase-merge/interactive")) { + status_printf(s, status_header, ""); + + git_snpath(path, sizeof(path), "%s", "rebase-merge/head-name"); + strbuf_read_file(&sb, path, 0); + strbuf_rtrim(&sb); + + status_printf_more(s, status_nobranch, + _("in the middle of a git rebase -i of %s"), + prefixcmp(sb.buf, "refs/heads/") == 0 ? + sb.buf + 11 : sb.buf); + } else if (wt_has_file("rebase-merge")) { + status_printf(s, status_header, ""); + + git_snpath(path, sizeof(path), "%s", "rebase-merge/head-name"); + strbuf_read_file(&sb, path, 0); + strbuf_rtrim(&sb); + + status_printf_more(s, status_nobranch, + _("in the middle of a git rebase -m on %s"), + prefixcmp(sb.buf, "refs/heads/") == 0 ? + sb.buf + 11 : sb.buf); + } else { + if (wt_has_file("rebase-apply")) { + status_printf(s, status_header, ""); + + if (wt_has_file("rebase-apply/rebasing")) { + status_printf_more(s, status_nobranch, + _("in the middle of a git rebase")); + } else if (wt_has_file("rebase-apply/applying")) { + status_printf_more(s, status_nobranch, + _("in the middle of a git am")); + } else { + status_printf_more(s, status_nobranch, + _("in the middle of a git rebase or am")); + } + } else if (wt_has_file("MERGE_HEAD")) { + status_printf(s, status_header, ""); + + status_printf_more(s, status_nobranch, + _("in the middle of a git merge")); + } else if (wt_has_file("CHERRY_PICK_HEAD")) { + status_printf(s, status_header, ""); + + status_printf_more(s, status_nobranch, + _("in the middle of a git cherry-pick")); + } else if (wt_has_file("BISECT_LOG")) { + status_printf(s, status_header, ""); + + status_printf_more(s, status_nobranch, + _("in the middle of a git bisect")); + } else { + return; + } + } + status_printf_more(s, status_header, "\n"); + strbuf_release(&sb); +} + static void wt_status_print_updated(struct wt_status *s) { int shown_header = 0; @@ -732,6 +805,7 @@ void wt_status_print(struct wt_status *s) status_printf_ln(s, color(WT_STATUS_HEADER, s), ""); } + wt_status_print_doingwhat(s); wt_status_print_updated(s); wt_status_print_unmerged(s); wt_status_print_changed(s); -- 1.7.5.1.289.g76e37.dirty -- 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