---
 wt-status.c | 49 +++++++++++++++++++++++++++++++++++++++++++------
 wt-status.h |  1 +
 2 files changed, 44 insertions(+), 6 deletions(-)

diff --git a/wt-status.c b/wt-status.c
index 0bccef542f..2a7627b331 100644
--- a/wt-status.c
+++ b/wt-status.c
@@ -1118,11 +1118,24 @@ static void show_merge_in_progress(struct wt_status *s,
        if (has_unmerged(s)) {
                status_printf_ln(s, color, _("You have unmerged paths."));
                if (s->hints) {
-                       status_printf_ln(s, color,
-                                        _("  (fix conflicts and run \"git 
commit\")"));
-                       status_printf_ln(s, color,
-                                        _("  (use \"git merge --abort\" to 
abort the merge)"));
+                       if (s->state.rebuash_in_progress) {
+                               status_printf_ln(s, color,
+                                               _("  (fix conflicts and run 
\"git rebuash --continue\")"));
+                               status_printf_ln(s, color,
+                                               _("  (use \"git rebuash 
--abort\" to abort the operation)"));
+                       } else {
+                               status_printf_ln(s, color,
+                                               _("  (fix conflicts and run 
\"git commit\")"));
+                               status_printf_ln(s, color,
+                                               _("  (use \"git merge --abort\" 
to abort the merge)"));
+                       }
                }
+       } else if (s->state.rebuash_in_progress) {
+               status_printf_ln(s, color,
+                       _("All conflicts fixed but you are still rebuashing."));
+               if (s->hints)
+                       status_printf_ln(s, color,
+                               _("  (use \"git rebuash --continue\" to 
conclude rebuash)"));
        } else {
                status_printf_ln(s, color,
                        _("All conflicts fixed but you are still merging."));
@@ -1386,6 +1399,15 @@ static void show_rebase_in_progress(struct wt_status *s,
        wt_longstatus_print_trailer(s);
 }
 
+static void show_rebuash_in_progress(struct wt_status *s,
+                                   const char *color)
+{
+       if (&s->state.rebuash_in_progress)
+               status_printf_ln(s, color,
+                       _("Rebuash currently in progress."));
+       wt_longstatus_print_trailer(s);
+}
+
 static void show_cherry_pick_in_progress(struct wt_status *s,
                                         const char *color)
 {
@@ -1583,6 +1605,18 @@ int wt_status_check_rebase(const struct worktree *wt,
        return 1;
 }
 
+int wt_status_check_rebuash(const struct worktree *wt,
+                          struct wt_status_state *state)
+{
+       struct stat st;
+
+       if (!stat(worktree_git_path(wt, "REBUASH_STATE"), &st)) {
+               state->rebuash_in_progress = 1;
+       } else
+               return 0;
+       return 1;
+}
+
 int wt_status_check_bisect(const struct worktree *wt,
                           struct wt_status_state *state)
 {
@@ -1614,6 +1648,7 @@ void wt_status_get_state(struct repository *r,
                state->cherry_pick_in_progress = 1;
                oidcpy(&state->cherry_pick_head_oid, &oid);
        }
+       wt_status_check_rebuash(NULL, state);
        wt_status_check_bisect(NULL, state);
        if (!stat(git_path_revert_head(r), &st) &&
            !get_oid("REVERT_HEAD", &oid)) {
@@ -1643,6 +1678,8 @@ static void wt_longstatus_print_state(struct wt_status *s)
                        show_rebase_information(s, state_color);
                        fputs("\n", s->fp);
                }
+               if (state->rebuash_in_progress)
+                       show_rebuash_in_progress(s, state_color);
                show_merge_in_progress(s, state_color);
        } else if (state->am_in_progress)
                show_am_in_progress(s, state_color);
@@ -1688,7 +1725,7 @@ static void wt_longstatus_print(struct wt_status *s)
                status_printf(s, color(WT_STATUS_HEADER, s), "%s", "");
                status_printf_more(s, branch_status_color, "%s", on_what);
                status_printf_more(s, branch_color, "%s\n", branch_name);
-               if (!s->is_initial)
+               if (!(s->is_initial || s->state.rebuash_in_progress))
                        wt_longstatus_print_tracking(s);
        }
 
@@ -1731,7 +1768,7 @@ static void wt_longstatus_print(struct wt_status *s)
 
        if (s->verbose)
                wt_longstatus_print_verbose(s);
-       if (!s->committable) {
+       if (!(s->committable || s->state.rebuash_in_progress)) {
                if (s->amend)
                        status_printf_ln(s, GIT_COLOR_NORMAL, _("No changes"));
                else if (s->nowarn)
diff --git a/wt-status.h b/wt-status.h
index 64f1ddc9fd..2995866327 100644
--- a/wt-status.h
+++ b/wt-status.h
@@ -72,6 +72,7 @@ struct wt_status_state {
        int rebase_in_progress;
        int rebase_interactive_in_progress;
        int cherry_pick_in_progress;
+       int rebuash_in_progress;
        int bisect_in_progress;
        int revert_in_progress;
        int detached_at;
-- 
2.20.1

Reply via email to