|  | --- | 
|  | 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 |