When the `done` file is missing, we die()d. This is not necessary, we can do much better than that. Changes since v1: - When `done` is missing, we still read `git-rebase-todo` and report the next steps. - We now report a missing git-rebase-todo. - Added a test (thanks, Matthieu, for prodding me into working harder ;-)). - As I changed so much, I took authorship of the patch. Johannes Schindelin (1): status: be prepared for not-yet-started interactive rebase t/t7512-status-help.sh | 19 +++++++++++++++++++ wt-status.c | 14 ++++++++++---- 2 files changed, 29 insertions(+), 4 deletions(-) base-commit: 4e59582ff70d299f5a88449891e78d15b4b3fabe Published-As: https://github.com/dscho/git/releases/tag/wt-status-v2 Fetch-It-Via: git fetch https://github.com/dscho/git wt-status-v2 Interdiff vs v1: diff --git a/t/t7512-status-help.sh b/t/t7512-status-help.sh index 5c3db656df..458608cc1e 100755 --- a/t/t7512-status-help.sh +++ b/t/t7512-status-help.sh @@ -944,4 +944,23 @@ EOF test_i18ncmp expected actual ' +test_expect_success 'status: handle not-yet-started rebase -i gracefully' ' + ONTO=$(git rev-parse --short HEAD^) && + COMMIT=$(git rev-parse --short HEAD) && + EDITOR="git status --untracked-files=no >actual" git rebase -i HEAD^ && + cat >expected <<EOF && +On branch several_commits +No commands done. +Next command to do (1 remaining command): + pick $COMMIT four_commit + (use "git rebase --edit-todo" to view and edit) +You are currently editing a commit while rebasing branch '\''several_commits'\'' on '\''$ONTO'\''. + (use "git commit --amend" to amend the current commit) + (use "git rebase --continue" once you are satisfied with your changes) + +nothing to commit (use -u to show untracked files) +EOF + test_i18ncmp expected actual +' + test_done diff --git a/wt-status.c b/wt-status.c index 13afe66649..4dff0b3e21 100644 --- a/wt-status.c +++ b/wt-status.c @@ -1169,12 +1169,12 @@ static void show_rebase_information(struct wt_status *s, struct string_list have_done = STRING_LIST_INIT_DUP; struct string_list yet_to_do = STRING_LIST_INIT_DUP; - if ((read_rebase_todolist("rebase-merge/done", &have_done)) || - (read_rebase_todolist("rebase-merge/git-rebase-todo", - &yet_to_do))) + read_rebase_todolist("rebase-merge/done", &have_done); + if (read_rebase_todolist("rebase-merge/git-rebase-todo", + &yet_to_do)) status_printf_ln(s, color, - _("rebase-i not started yet.")); - else if (have_done.nr == 0) + _("git-rebase-todo is missing.")); + if (have_done.nr == 0) status_printf_ln(s, color, _("No commands done.")); else { status_printf_ln(s, color, @@ -1192,9 +1192,7 @@ static void show_rebase_information(struct wt_status *s, _(" (see more in file %s)"), git_path("rebase-merge/done")); } - if (have_done.nr == 0) - ; /* do nothing */ - else if (yet_to_do.nr == 0) + if (yet_to_do.nr == 0) status_printf_ln(s, color, _("No commands remaining.")); else { -- 2.11.1.windows.prerelease.2.9.g3014b57