> @@ -370,19 +383,79 @@ static int is_index_unchanged(void) > } > > /* > + * Read the author-script file into an environment block, ready for use in > + * run_command(), that can be free()d afterwards. > + */ > +static char **read_author_script(void) > +{ > + struct strbuf script = STRBUF_INIT; > + int i, count = 0; > + char *p, *p2, **env; > + size_t env_size; > + > + if (strbuf_read_file(&script, rebase_path_author_script(), 256) <= 0) > + return NULL; > + > + for (p = script.buf; *p; p++) > + if (skip_prefix(p, "'\\\\''", (const char **)&p2)) > + strbuf_splice(&script, p - script.buf, p2 - p, "'", 1); > + else if (*p == '\'') > + strbuf_splice(&script, p-- - script.buf, 1, "", 0); > + else if (*p == '\n') { > + *p = '\0'; > + count++; > + } Hmph, didn't we recently add parse_key_value_squoted() to build read_author_script() in builtin/am.c on top of it, so that this piece of code can also take advantage of and share the parser? > +/* Offtopic: this line and the beginning of the new comment block that begins with "Read the author-script" above show a suboptimal marking of what is added and what is left. I wonder "diff-indent-heuristic" topic by Michael can help to make it look better. > * If we are cherry-pick, and if the merge did not result in > * hand-editing, we will hit this commit and inherit the original > * author date and name. > + * > * If we are revert, or if our cherry-pick results in a hand merge, > * we had better say that the current user is responsible for that. > + * > + * An exception is when run_git_commit() is called during an > + * interactive rebase: in that case, we will want to retain the > + * author metadata. > */