On 18/07/18 14:50, Phillip Wood wrote:
Hi Akinori
On 12/07/18 12:18, Akinori MUSHA wrote:
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@xxxxxxxxxxxx>
---
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"
+'
Have you checked that this test fails without your fix being applied? I
just ran
sh -c 'eval "$(cat .git/rebase-merge/author-script)"; echo
"$GIT_AUTHOR_NAME"'
while a rebase was stopped for an edit and it worked despite the fact
that there is a missing quote at the end of the GIT_AUTHOR_DATE in the
author script file.
Best Wishes
Phillip
Please ignore that, I messed up, there was a closing "'" as I was using
the shell version by a mistake.
Sorry for the noise
Phillip
test_expect_success 'rebase -i with the exec command' '
git checkout master &&
(