[PATCH v3] Re: git-am: fix maildir support regression: accept email file as patch
From: Nicolas Sebrecht <hidden>
Date: 2016-06-15 22:47:03
The 15/07/09, Junio C Hamano wrote:
I think you did not understand the point of the three liner I sent you. sed -e '/^$/q' -e '/^[ ]/d' "$1" |
I'll change it to sed -e '/^$/q' -e '/^[[:blank:]]/d' "$1" | to conform to reality (and the paragraph 3.4.2 of the RFC 822).
The point of this is not to use the silly "we only look at the first
three lines" rule. Instead, it ignores these l1/l2/l3, but grabs all
the header lines, but discards second and subsequent physical lines if
a logical line was folded. Which means that the effect of this is to
pipe the whole header (again, without worrying about the indented
remainder of folded lines) to downsream, which is the grep -v below
grep -v -E -e '^[A-Za-z]+(-[A-Za-z]+)*:' >/dev/null ||
This checks if there is a line that does _NOT_ match the usual
e-mail header pattern. If there is such a line, it means that the
file is not an e-mail message. If there is no such line, we say...I don't see the reason to have the option -v. It's only related to what's printed to output and doesn't change the exit status which tell us if an expression has matched. This gives: grep -E -e '^[A-Za-z]+(-[A-Za-z]+)*:' >/dev/null && patch_format=mbox
One caveat is that the above logic alone won't catch a random file that
does not have _any_ e-mail headers in it. So you might need to do
something like:
LF='
'
case "$l1$LF$l2$LF$l3" in
*"$LF$LF"*)
# has a completely empty line in there?
# that means the message has only two headers at most;
# that cannot be an email.
;;I think we can strip this part. The purpose is to accept what _may_ be a patch. Any wrong patch or random file will be rejected later. -- Nicolas Sebrecht