threads / patch / 20782

patchMajorly simplify the definition of scissors line

Subject: [PATCH] Majorly simplify the definition of scissors line

## tl;dr

One message between Aug 29, 2009 and Aug 29, 2009. Diffs are folded; open one to read it.

replies: 0people: 1as markdown or json

しらいし ななこ· Aug 29, 2009, 07:17 UTC · lore

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@lavabit.com>
---
 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(-)
Show changes to 4 files +10 −50

Documentation/git-mailinfo.txt, builtin-mailinfo.c, t/t5100/msg0014, t/t5100/sample.mbox

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@pobox.com>
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@pobox.com>
-- 
1.6.4.1

-- 
Nanako Shiraishi
http://ivory.ap.teacup.com/nanako3/

← back to recent threads