summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohannes Schindelin <johannes.schindelin@gmx.de>2016-10-21 14:24:46 +0200
committerJunio C Hamano <gitster@pobox.com>2016-10-21 09:32:34 -0700
commit6307041dd2ca2f3507dc2791a1824d72302b0081 (patch)
tree8a23738830f59531827b0e8d0d50fac783c61453
parent004fefa754a4aa3a99a5954da9fb805dbba8dbeb (diff)
downloadgit-6307041dd2ca2f3507dc2791a1824d72302b0081.tar.gz
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>
-rw-r--r--sequencer.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/sequencer.c b/sequencer.c
index 145de786e1..04fcfd893f 100644
--- a/sequencer.c
+++ b/sequencer.c
@@ -776,6 +776,9 @@ static int parse_insn_buffer(char *buf, struct todo_list *todo_list)
next_p = *eol ? eol + 1 /* skip LF */ : eol;
+ if (p != eol && eol[-1] == '\r')
+ eol--; /* strip Carriage Return */
+
item = append_new_todo(todo_list);
item->offset_in_buf = p - todo_list->buf.buf;
if (parse_insn_line(item, p, eol)) {