Re: [PATCH-v2/RFC 3/6] xutils: fix ignore-all-space on incomplete line
From: Junio C Hamano <hidden>
Date: 2016-06-15 22:47:18
Subsystem:
the rest · Maintainer:
Linus Torvalds
Nanako Shiraishi [off-list ref] writes:
Quoting Junio C Hamano [off-list ref]quoted
How about doing it like this patch instead? This counterproposal replaces your 3 patches starting from [3/6]. -- >8 -- Subject: xutils: Fix xdl_recmatch() on incomplete lines Thell Fowler noticed that various "ignore whitespace" options to git diff does not work well with whitespace glitches on an incomplete line.I think this should be "options to git diff don't work".
Soory, I kant speel; thanks.
(1) Why do you post patches to the list, instead of committing them yourself?
So that others can catch silly mistakes of mine, like the one you just caught. I play three separate roles here, two of which I should send patches out while playing them. * Just like everybody else, I find itches to scratch from time to time, and I build my own topic branches locally for the changes to scratch them, just like other contributors. They are indeed committed and often immediately merged to 'pu', but I send out format-patch output for them, because I firmly believe that the development _process_, not just the end result, should be in the open. Everybody's patch should go through the list, get reviewed and improved by help from others. So should mine. * I read others' patches, review, comment, and suggest improvements and make counterproposals, just like others on the list. The "how about" patches when I am playing this role are often not meant as the final shape of the patch but to show the direction to improve upon. They are output from "git diff", not format-patch nor even "git diff --cached"---I do not commit, nor even add them to the index---and after I send out e-mails, I typically reset them away to work on something else, because they are usually not my itch. * I accept patches that were reviewed favorably on the list by running "git am" on them.
(2) How do I apply a patch like this one to try to my tree? Am I expected to edit the mail message to remove everything before the shears mark before running the git-am command?
That is how I have been doing it. My workflow is:
(1) First read patches in my primary mailbox, while copying promising
ones to a separate mailbox;
(2) And then go through the separate mailbox as a separate pass, while
fixing obvious typos and minor coding style violations still inside
mailbox; and finally
(3) Run "git am" on the (possibly edited) patch to apply.
Because I'll be editing the messages (both log and code) _anyway_,
removing everything before the scissors mark is not much of a trouble.
Having said that, I could use something like this.
-- >8 -- cut here -- >8 --
Subject: [PATCH] Teach mailinfo to ignore everything before -- >8 -- mark
This teaches mailinfo the scissors -- >8 -- mark; the command ignores
everything before it in the message body.
Signed-off-by: Junio C Hamano <redacted>
---
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