Browse Source

Merge branch 'js/status-pre-rebase-i'

After starting "git rebase -i", which first opens the user's editor
to edit the series of patches to apply, but before saving the
contents of that file, "git status" failed to show the current
state (i.e. you are in an interactive rebase session, but you have
applied no steps yet) correctly.

* js/status-pre-rebase-i:
  status: be prepared for not-yet-started interactive rebase
maint
Junio C Hamano 8 years ago
parent
commit
93d2387718
  1. 19
      t/t7512-status-help.sh
  2. 14
      wt-status.c

19
t/t7512-status-help.sh

@ -944,4 +944,23 @@ EOF @@ -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

14
wt-status.c

@ -1135,14 +1135,17 @@ static void abbrev_sha1_in_line(struct strbuf *line) @@ -1135,14 +1135,17 @@ static void abbrev_sha1_in_line(struct strbuf *line)
strbuf_list_free(split);
}

static void read_rebase_todolist(const char *fname, struct string_list *lines)
static int read_rebase_todolist(const char *fname, struct string_list *lines)
{
struct strbuf line = STRBUF_INIT;
FILE *f = fopen(git_path("%s", fname), "r");

if (!f)
if (!f) {
if (errno == ENOENT)
return -1;
die_errno("Could not open file %s for reading",
git_path("%s", fname));
}
while (!strbuf_getline_lf(&line, f)) {
if (line.len && line.buf[0] == comment_line_char)
continue;
@ -1152,6 +1155,7 @@ static void read_rebase_todolist(const char *fname, struct string_list *lines) @@ -1152,6 +1155,7 @@ static void read_rebase_todolist(const char *fname, struct string_list *lines)
abbrev_sha1_in_line(&line);
string_list_append(lines, line.buf);
}
return 0;
}

static void show_rebase_information(struct wt_status *s,
@ -1166,8 +1170,10 @@ static void show_rebase_information(struct wt_status *s, @@ -1166,8 +1170,10 @@ static void show_rebase_information(struct wt_status *s,
struct string_list yet_to_do = STRING_LIST_INIT_DUP;

read_rebase_todolist("rebase-merge/done", &have_done);
read_rebase_todolist("rebase-merge/git-rebase-todo", &yet_to_do);

if (read_rebase_todolist("rebase-merge/git-rebase-todo",
&yet_to_do))
status_printf_ln(s, color,
_("git-rebase-todo is missing."));
if (have_done.nr == 0)
status_printf_ln(s, color, _("No commands done."));
else {

Loading…
Cancel
Save