git/import: handle mails with line wrapping and mime

git/import expected a patch, however upas/fs serves
either a raw file without any of the mime decoding
and line joining, or a directory, with the headers
and body split out.

This makes it a pain to apply some mails.

So, here we teach git to import upas dirs natively,
making it easy to handle all patches that come in
as emails.
This commit is contained in:
Ori Bernstein 2021-06-15 21:29:22 +00:00
parent 21283578eb
commit 7c3ff53574

View file

@ -37,7 +37,7 @@ fn apply @{
date=$0
}
state=="headers" && /^Subject:/{
sub(/^Subject:[ \t]*(\[PATCH( [0-9]+\/[0-9]+)?\])*[ \t]*/, "", $0);
sub(/^Subject:[ \t]*(\[[^\]]*\][ \t]*)*/, "", $0);
gotmsg = 1
print > "/env/msg"
}
@ -94,6 +94,14 @@ eval `''{aux/getflags $*} || exec aux/usage
patches=(/fd/0)
if(! ~ $#* 0)
patches=$*
for(f in $patches)
apply < $f || die $status
for(p in $patches){
# upas serves the decoded header and body separately,
# so we cat them together when applying a upas message.
#
# this allows mime-encoded or line-wrapped patches.
if(test -d $p && test -f $p/header && test -f $p/body)
{{cat $p/header; echo; cat $p/body} | apply} || die $status
if not
apply < $p || die $status
}
exit ''