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

[PATCH] sequencer.c: terminate the last line of author-script properly

From
AMAkinori MUSHA <knu@idaemons.org>
Date
Jul 12, 2018, 11:18 UTC
Message-ID
<86a7qwpt9g.knu@iDaemons.org>

It looks like write_author_script() intends to write out a file in Bourne shell syntax, but it doesn't put a closing single quote on the last line.

This patch makes .git/rebase-merge/author-script actually parsable by sh(1) by adding a single quote and a linefeed to terminate the line properly.

Signed-off-by: Akinori MUSHA <knu@idaemons.org>
---
 sequencer.c                   |  1 +
 t/t3404-rebase-interactive.sh | 13 +++++++++++++
 2 files changed, 14 insertions(+)
diff --git a/sequencer.c b/sequencer.c
index 4034c0461..5f32b6df1 100644
--- a/sequencer.c
+++ b/sequencer.c
@@ -651,6 +651,7 @@ static int write_author_script(const char *message)
 			strbuf_addch(&buf, *(message++));
 		else
 			strbuf_addf(&buf, "'\\\\%c'", *(message++));
+	strbuf_addstr(&buf, "'\n");
 	res = write_message(buf.buf, buf.len, rebase_path_author_script(), 1);
 	strbuf_release(&buf);
 	return res;
diff --git a/t/t3404-rebase-interactive.sh b/t/t3404-rebase-interactive.sh
index 352a52e59..345b103eb 100755
--- a/t/t3404-rebase-interactive.sh
+++ b/t/t3404-rebase-interactive.sh
@@ -75,6 +75,19 @@ test_expect_success 'rebase --keep-empty' '
 	test_line_count = 6 actual
 '
 
+test_expect_success 'rebase -i writes out .git/rebase-merge/author-script in "edit" that sh(1) can parse' '
+	test_when_finished "git rebase --abort ||:" &&
+	git checkout master &&
+	set_fake_editor &&
+	FAKE_LINES="edit 1" git rebase -i HEAD^ &&
+	test -f .git/rebase-merge/author-script &&
+	unset GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL GIT_AUTHOR_DATE &&
+	eval "$(cat .git/rebase-merge/author-script)" &&
+	test "$(git show --quiet --pretty=format:%an)" = "$GIT_AUTHOR_NAME" &&
+	test "$(git show --quiet --pretty=format:%ae)" = "$GIT_AUTHOR_EMAIL" &&
+	test "$(git show --quiet --date=raw --pretty=format:@%ad)" = "$GIT_AUTHOR_DATE"
+'
+
 test_expect_success 'rebase -i with the exec command' '
 	git checkout master &&
 	(
-- 
2.18.0


-- 
Akinori MUSHA / https://akinori.org/
Next: Junio C Hamano
Message 1 of 27 in “sequencer.c: terminate the last line of author-script properly”
  1. sequencer.c: terminate the last line of author-script properlyAkinori MUSHA, Jul 12, 2018
  2. Junio C HamanoJul 12, 2018
  3. Phillip WoodJul 18, 2018
  4. Phillip WoodJul 18, 2018
  5. sequencer: fix quoting in write_author_scriptPhillip Wood, Jul 18, 2018
  6. Junio C HamanoJul 24, 2018
  7. Johannes SchindelinJul 26, 2018
  8. Phillip WoodJul 27, 2018
  9. Johannes SchindelinJul 27, 2018
  10. Phillip WoodJul 30, 2018
  11. Junio C HamanoJul 18, 2018
  12. Junio C HamanoJul 18, 2018
  13. Phillip WoodJul 19, 2018
  14. Johannes SchindelinJul 26, 2018
  15. Junio C HamanoJul 26, 2018
  16. Junio C HamanoJul 12, 2018
  17. Eric SunshineJul 12, 2018
  18. Junio C HamanoJul 12, 2018
  19. Junio C HamanoJul 17, 2018
  20. Akinori MUSHAJul 18, 2018
  21. Johannes SchindelinJul 26, 2018
  22. Junio C HamanoJul 26, 2018
  23. Johannes SchindelinJul 27, 2018
  24. Junio C HamanoJul 12, 2018
  25. Phillip WoodJul 18, 2018
  26. Phillip WoodJul 18, 2018
  27. Phillip WoodJul 18, 2018

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.