| 866 | } |
| 867 | |
| 868 | static int write_author_script(const char *message) |
| 869 | { |
| 870 | struct strbuf buf = STRBUF_INIT; |
| 871 | const char *eol; |
| 872 | int res; |
| 873 | |
| 874 | for (;;) |
| 875 | if (!*message || starts_with(message, "\n")) { |
| 876 | missing_author: |
| 877 | /* Missing 'author' line? */ |
| 878 | unlink(rebase_path_author_script()); |
| 879 | return 0; |
| 880 | } else if (skip_prefix(message, "author ", &message)) |
| 881 | break; |
| 882 | else if ((eol = strchr(message, '\n'))) |
| 883 | message = eol + 1; |
| 884 | else |
| 885 | goto missing_author; |
| 886 | |
| 887 | strbuf_addstr(&buf, "GIT_AUTHOR_NAME='"); |
| 888 | while (*message && *message != '\n' && *message != '\r') |
| 889 | if (skip_prefix(message, " <", &message)) |
| 890 | break; |
| 891 | else if (*message != '\'') |
| 892 | strbuf_addch(&buf, *(message++)); |
| 893 | else |
| 894 | strbuf_addf(&buf, "'\\%c'", *(message++)); |
| 895 | strbuf_addstr(&buf, "'\nGIT_AUTHOR_EMAIL='"); |
| 896 | while (*message && *message != '\n' && *message != '\r') |
| 897 | if (skip_prefix(message, "> ", &message)) |
| 898 | break; |
| 899 | else if (*message != '\'') |
| 900 | strbuf_addch(&buf, *(message++)); |
| 901 | else |
| 902 | strbuf_addf(&buf, "'\\%c'", *(message++)); |
| 903 | strbuf_addstr(&buf, "'\nGIT_AUTHOR_DATE='@"); |
| 904 | while (*message && *message != '\n' && *message != '\r') |
| 905 | if (*message != '\'') |
| 906 | strbuf_addch(&buf, *(message++)); |
| 907 | else |
| 908 | strbuf_addf(&buf, "'\\%c'", *(message++)); |
| 909 | strbuf_addch(&buf, '\''); |
| 910 | res = write_message(buf.buf, buf.len, rebase_path_author_script(), 1); |
| 911 | strbuf_release(&buf); |
| 912 | return res; |
| 913 | } |
| 914 | |
| 915 | /** |
| 916 | * Take a series of KEY='VALUE' lines where VALUE part is |
no test coverage detected