git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: Bug? ran into a "fatal" using interactive rebase

From
Johannes Schindelin <johannes.schindelin@gmx.de>
Date
Sep 7, 2016, 15:19 UTC
Message-ID
<alpine.DEB.2.20.1609071714540.129229@virtualbox>
In-Reply-To
<CAN0XMO+ZOV3M02wJ_=oMPbN4ch-=7gA_pXEegfHApvSNeOu3KA@mail.gmail.com>
Hi Ralf,
On Tue, 6 Sep 2016, Ralf Thielow wrote:
Show 9 quoted lines
> today I accidentally triggered a "fatal" using interactive rebase.
> 
> If you edit the instruction sheet after 'rebase -i' and add an unknown
> command, Git stops because it doesn't know the command.
> That's fine, however, now we are in a state where 'git status' fails with
> 
> interactive rebase in progress; onto 311f279
> fatal: Could not open file .git/rebase-merge/done for reading: No such
> file or directory

There was some discussion revolving around this (IIRC Matthieu was involved, hence I Cc:ed him) and I was under the impression that we fixed the status code not to assume the presence of the "done" file.

Apparently I was wrong...

So, something like this should help (if you are interested in seeing this patch included, please run with it, as I am running short on time):

-- snipsnap --
diff --git a/wt-status.c b/wt-status.c
index 6225a2d..8e4d999 100644
--- a/wt-status.c
+++ b/wt-status.c
@@ -1072,14 +1072,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 void read_rebase_todolist(const char *fname, struct string_list *lines, int gently)
 {
 	struct strbuf line = STRBUF_INIT;
 	FILE *f = fopen(git_path("%s", fname), "r");
 
-	if (!f)
+	if (!f) {
+		if (gently)
+			return;
 		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;
@@ -1102,8 +1105,8 @@ 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;
 
-		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, 1);
+		read_rebase_todolist("rebase-merge/git-rebase-todo", &yet_to_do, 0);
 
 		if (have_done.nr == 0)
 			status_printf_ln(s, color, _("No commands done."));
Previous: Ralf ThielowNext: Ralf Thielow
Message 2 of 4 in “Bug? ran into a "fatal" using interactive rebase”
  1. Ralf ThielowSep 6, 2016
  2. Johannes SchindelinSep 7, 2016
  3. Ralf ThielowSep 7, 2016
  4. Johannes SchindelinSep 8, 2016

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.