From: Brian Malehorn <bmalehorn@gmail.com>
To: git@vger.kernel.org
Cc: Brian Malehorn <bmalehorn@gmail.com>
Subject: [PATCH 2/3] commit.c: add is_scissors_line
Date: Thu, 11 May 2017 22:03:46 -0700 [thread overview]
Message-ID: <20170512050347.30765-3-bmalehorn@gmail.com> (raw)
In-Reply-To: <20170512050347.30765-1-bmalehorn@gmail.com>
Move is_scissors_line to commit.c and expose it through commit.h.
This is needed in commit.c, and mailinfo.c shouldn't really own it.
---
commit.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++
commit.h | 1 +
mailinfo.c | 53 +----------------------------------------------------
3 files changed, 54 insertions(+), 52 deletions(-)
diff --git a/commit.c b/commit.c
index fab826973..041cfa5a9 100644
--- a/commit.c
+++ b/commit.c
@@ -1646,6 +1646,58 @@ const char *find_commit_header(const char *msg, const char *key, size_t *out_len
return NULL;
}
+int is_scissors_line(const char *line)
+{
+ const char *c;
+ int scissors = 0, gap = 0;
+ const char *first_nonblank = NULL, *last_nonblank = NULL;
+ int visible, perforation = 0, in_perforation = 0;
+
+ for (c = line; *c != '\n'; c++) {
+ if (isspace(*c)) {
+ if (in_perforation) {
+ perforation++;
+ gap++;
+ }
+ continue;
+ }
+ last_nonblank = c;
+ if (first_nonblank == NULL)
+ first_nonblank = c;
+ if (*c == '-') {
+ in_perforation = 1;
+ perforation++;
+ continue;
+ }
+ if ((!memcmp(c, ">8", 2) || !memcmp(c, "8<", 2) ||
+ !memcmp(c, ">%", 2) || !memcmp(c, "%<", 2))) {
+ in_perforation = 1;
+ perforation += 2;
+ scissors += 2;
+ c++;
+ 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.
+ */
+
+ if (first_nonblank && last_nonblank)
+ visible = last_nonblank - first_nonblank + 1;
+ else
+ visible = 0;
+ return (scissors && 8 <= visible &&
+ visible < perforation * 3 &&
+ gap * 2 < perforation);
+}
+
/*
* Inspect the given string and determine the true "end" of the log message, in
* order to find where to put a new Signed-off-by: line. Ignored are
diff --git a/commit.h b/commit.h
index 9c12abb91..58cbab1cd 100644
--- a/commit.h
+++ b/commit.h
@@ -353,6 +353,7 @@ extern void free_commit_extra_headers(struct commit_extra_header *extra);
*/
extern const char *find_commit_header(const char *msg, const char *key,
size_t *out_len);
+extern int is_scissors_line(const char *line);
/* Find the end of the log message, the right place for a new trailer. */
extern int ignore_non_trailer(const char *buf, size_t len);
diff --git a/mailinfo.c b/mailinfo.c
index eadd0597f..52af800a5 100644
--- a/mailinfo.c
+++ b/mailinfo.c
@@ -1,6 +1,7 @@
#include "cache.h"
#include "utf8.h"
#include "strbuf.h"
+#include "commit.h"
#include "mailinfo.h"
static void cleanup_space(struct strbuf *sb)
@@ -654,58 +655,6 @@ static inline int patchbreak(const struct strbuf *line)
return 0;
}
-static int is_scissors_line(const char *line)
-{
- const char *c;
- int scissors = 0, gap = 0;
- const char *first_nonblank = NULL, *last_nonblank = NULL;
- int visible, perforation = 0, in_perforation = 0;
-
- for (c = line; *c != '\n'; c++) {
- if (isspace(*c)) {
- if (in_perforation) {
- perforation++;
- gap++;
- }
- continue;
- }
- last_nonblank = c;
- if (first_nonblank == NULL)
- first_nonblank = c;
- if (*c == '-') {
- in_perforation = 1;
- perforation++;
- continue;
- }
- if ((!memcmp(c, ">8", 2) || !memcmp(c, "8<", 2) ||
- !memcmp(c, ">%", 2) || !memcmp(c, "%<", 2))) {
- in_perforation = 1;
- perforation += 2;
- scissors += 2;
- c++;
- 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.
- */
-
- if (first_nonblank && last_nonblank)
- visible = last_nonblank - first_nonblank + 1;
- else
- visible = 0;
- return (scissors && 8 <= visible &&
- visible < perforation * 3 &&
- gap * 2 < perforation);
-}
-
static void flush_inbody_header_accum(struct mailinfo *mi)
{
if (!mi->inbody_header_accum.len)
--
2.12.3.3.g39c96af
next prev parent reply other threads:[~2017-05-12 5:04 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-05-12 5:03 [PATCH 0/3] interpret-trailers + commit -v bugfix Brian Malehorn
2017-05-12 5:03 ` [PATCH 1/3] mailinfo.c: is_scissors_line ends on newline Brian Malehorn
2017-05-12 8:31 ` Jeff King
2017-05-12 5:03 ` Brian Malehorn [this message]
2017-05-12 8:40 ` [PATCH 2/3] commit.c: add is_scissors_line Jeff King
2017-05-12 5:03 ` [PATCH 3/3] commit.c: skip scissors when computing trailers Brian Malehorn
2017-05-12 8:52 ` Jeff King
2017-05-12 9:00 ` [PATCH 0/3] interpret-trailers + commit -v bugfix Jeff King
2017-05-14 3:39 ` Brian Malehorn
2017-05-14 3:39 ` [PATCH] interpret-trailers: obey scissors lines Brian Malehorn
2017-05-14 3:56 ` Jeff King
2017-05-14 8:33 ` Brian Malehorn
2017-05-14 8:33 ` Brian Malehorn
2017-05-15 3:55 ` Junio C Hamano
2017-05-15 4:23 ` Junio C Hamano
2017-05-16 6:06 ` Brian Malehorn
2017-05-16 6:06 ` [PATCH] interpret-trailers: honor the cut line Brian Malehorn
2017-05-16 6:42 ` [PATCH] interpret-trailers: obey scissors lines Junio C Hamano
2017-05-15 3:08 ` Jeff King
2017-05-15 2:12 ` Junio C Hamano
2017-05-15 3:07 ` Jeff King
2017-05-15 3:32 ` Junio C Hamano
2017-05-15 3:33 ` Jeff King
2017-05-14 7:02 ` Ævar Arnfjörð Bjarmason
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170512050347.30765-3-bmalehorn@gmail.com \
--to=bmalehorn@gmail.com \
--cc=git@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).