You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
1.5 KiB
64 lines
1.5 KiB
--- |
|
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
|
|
|