sequencer: strip CR from the todo script

It is not unheard of that editors on Windows write CR/LF even if the file originally had only LF. This is particularly awkward for exec lines of a rebase -i todo sheet. Take for example the insn "exec echo": The shell script parser splits at the LF and leaves the CR attached to "echo", which leads to the unknown command "echo\r". Work around that by stripping CR when reading the todo commands, as we already do for LF. This happens to fix t9903.14 and .15 in MSYS1 environments (with the rebase--helper patches based on this patch series): the todo script constructed in such a setup contains CR/LF thanks to MSYS1 runtime's cleverness. Based on a report and a patch by Johannes Sixt. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Johannes Schindelin committed Oct 21, 2016 at 14:24 UTC 6307041dd2ca2f3507dc2791a1824d72302b0081
1 file changed +3
sequencer.c
+3
@@ -776,6 +776,9 @@ static int parse_insn_buffer(char *buf, struct todo_list *todo_list)
776
777 next_p = *eol ? eol + 1 /* skip LF */ : eol;
778
779 + if (p != eol && eol[-1] == '\r')
780 + eol--; /* strip Carriage Return */
781 +
782 item = append_new_todo(todo_list);
783 item->offset_in_buf = p - todo_list->buf.buf;
784 if (parse_insn_line(item, p, eol)) {