| --- | |
| builtin-mailinfo.c | 37 ++++++++++++++++++++++++++++++++++++- | |
| 1 files changed, 36 insertions(+), 1 deletions(-) | |
| diff --git a/builtin-mailinfo.c b/builtin-mailinfo.c | |
| index b0b5d8f..461c47e 100644 | |
| --- a/builtin-mailinfo.c | |
| +++ b/builtin-mailinfo.c | |
| @@ -712,6 +712,34 @@ static inline int patchbreak(const struct strbuf *line) | |
| return 0; | |
| } | |
| +static int scissors(const struct strbuf *line) | |
| +{ | |
| + size_t i, len = line->len; | |
| + int scissors_dashes_seen = 0; | |
| + const char *buf = line->buf; | |
| + | |
| + for (i = 0; i < len; i++) { | |
| + if (isspace(buf[i])) | |
| + continue; | |
| + if (buf[i] == '-') { | |
| + scissors_dashes_seen |= 02; | |
| + continue; | |
| + } | |
| + if (i + 1 < len && !memcmp(buf + i, ">8", 2)) { | |
| + scissors_dashes_seen |= 01; | |
| + i++; | |
| + continue; | |
| + } | |
| + if (i + 7 < len && !memcmp(buf + i, "cut here", 8)) { | |
| + i += 7; | |
| + continue; | |
| + } | |
| + /* everything else --- not scissors */ | |
| + break; | |
| + } | |
| + return scissors_dashes_seen == 03; | |
| +} | |
| + | |
| static int handle_commit_msg(struct strbuf *line) | |
| { | |
| static int still_looking = 1; | |
| @@ -723,10 +751,17 @@ static int handle_commit_msg(struct strbuf *line) | |
| strbuf_ltrim(line); | |
| if (!line->len) | |
| return 0; | |
| - if ((still_looking = check_header(line, s_hdr_data, 0)) != 0) | |
| + still_looking = check_header(line, s_hdr_data, 0); | |
| + if (still_looking) | |
| return 0; | |
| } | |
| + if (scissors(line)) { | |
| + fseek(cmitmsg, 0L, SEEK_SET); | |
| + still_looking = 1; | |
| + return 0; | |
| + } | |
| + | |
| /* normalize the log message to UTF-8. */ | |
| if (metainfo_charset) | |
| convert_to_utf8(line, charset.buf); | |
| -- | |
| 1.6.4.1 |