Re: [PATCH-v2/RFC 3/6] xutils: fix ignore-all-space on incomplete line
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Aug 23, 2009, 08:56 UTC
- Message-ID
- <7v1vn2yklo.fsf@alter.siamese.dyndns.org>
- In-Reply-To
- <20090823171819.6117@nanako3.lavabit.com>
Nanako Shiraishi <nanako3@lavabit.com> writes:
Show 13 quoted lines
> Quoting Junio C Hamano <gitster@pobox.com> > >> 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 <gitster@pobox.com> --- 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