The definition of scissors line was "a line that mainly consists of scissors and perforation". While it is easy to explain to new people, this does not exactly define where the line between "mainly consists of" and "contains some amount of" lies. Make the definition more strict and allow only lines that begin with a '-- >8 --' (or its left-handed equivalent '-- 8< --'), which is equally easy to explain to new people. More important, the rule is much shorter and more precise, so it is easier to remember. This pattern also is how Nicolas Sebrecht initially thought what the definition was, without reading what Junio's code really did, so we have an empirical evidence that this matches at least one newcomer's intuition. Signed-off-by: しらいし ななこ <nanako3@xxxxxxxxxxx> --- Documentation/git-mailinfo.txt | 4 +- builtin-mailinfo.c | 48 +++------------------------------------ t/t5100/msg0014 | 4 +- t/t5100/sample.mbox | 4 +- 4 files changed, 10 insertions(+), 50 deletions(-) diff --git a/Documentation/git-mailinfo.txt b/Documentation/git-mailinfo.txt index 71b93ad..1c2c414 100644 --- a/Documentation/git-mailinfo.txt +++ b/Documentation/git-mailinfo.txt @@ -56,8 +56,8 @@ conversion, even with this flag. --scissors:: Remove everything in body before a scissors line. A line that - mainly consists of scissors (either ">8" or "8<") and perforation - (dash "-") marks is called a scissors line, and is used to request + begins with "-- >8 --" or "-- 8< --" is called a scissors line, + and is used to request the reader to cut the message at that line. If such a line appears in the body of the message before the patch, everything before it (including the scissors line itself) is ignored when diff --git a/builtin-mailinfo.c b/builtin-mailinfo.c index 508bdf0..1bbad4e 100644 --- a/builtin-mailinfo.c +++ b/builtin-mailinfo.c @@ -722,52 +722,12 @@ static inline int patchbreak(const struct strbuf *line) static int is_scissors_line(const struct strbuf *line) { - size_t i, len = line->len; - int scissors = 0, gap = 0; - int first_nonblank = -1; - int last_nonblank = 0, visible, perforation = 0, in_perforation = 0; const char *buf = line->buf; + size_t len = line->len; - for (i = 0; i < len; i++) { - if (isspace(buf[i])) { - if (in_perforation) { - perforation++; - gap++; - } - continue; - } - last_nonblank = i; - if (first_nonblank < 0) - first_nonblank = i; - if (buf[i] == '-') { - in_perforation = 1; - perforation++; - continue; - } - if (i + 1 < len && - (!memcmp(buf + i, ">8", 2) || !memcmp(buf + i, "8<", 2))) { - in_perforation = 1; - perforation += 2; - scissors += 2; - i++; - continue; - } - in_perforation = 0; - } - - /* - * The mark must be at least 8 bytes long (e.g. "-- >8 --"). - * Even though there can be arbitrary cruft on the same line - * (e.g. "cut here"), in order to avoid misidentification, the - * perforation must occupy more than a third of the visible - * width of the line, and dashes and scissors must occupy more - * than half of the perforation. - */ - - visible = last_nonblank - first_nonblank + 1; - return (scissors && 8 <= visible && - visible < perforation * 3 && - gap * 2 < perforation); + if (len < 8) + return 0; + return (!memcmp("-- >8 --", buf, 8) || !memcmp("-- 8< --", buf, 8)); } static int handle_commit_msg(struct strbuf *line) diff --git a/t/t5100/msg0014 b/t/t5100/msg0014 index 62e5cd2..187ff57 100644 --- a/t/t5100/msg0014 +++ b/t/t5100/msg0014 @@ -6,8 +6,8 @@ Subject: [PATCH] BLAH TWO And then we will see the scissors. - This line is not a scissors mark -- >8 -- but talks about it. - - - >8 - - please remove everything above this line - - >8 - - + This is not a scissors line -- >8 -- but talks about it. +-- >8 -- please remove everything above this line -- >8 -- Subject: [PATCH] Teach mailinfo to ignore everything before -- >8 -- mark From: Junio C Hamano <gitster@xxxxxxxxx> diff --git a/t/t5100/sample.mbox b/t/t5100/sample.mbox index 13fa4ae..563f713 100644 --- a/t/t5100/sample.mbox +++ b/t/t5100/sample.mbox @@ -576,8 +576,8 @@ Subject: [PATCH] BLAH TWO And then we will see the scissors. - This line is not a scissors mark -- >8 -- but talks about it. - - - >8 - - please remove everything above this line - - >8 - - + This is not a scissors line -- >8 -- but talks about it. +-- >8 -- please remove everything above this line -- >8 -- Subject: [PATCH] Teach mailinfo to ignore everything before -- >8 -- mark From: Junio C Hamano <gitster@xxxxxxxxx> -- 1.6.4.1 -- Nanako Shiraishi http://ivory.ap.teacup.com/nanako3/ -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html