ref: 7c3ff535745b373775fbdab74954e7717abbce84
parent: 21283578ebbc2663e698733a6d11ace0e98bc8a9
author: Ori Bernstein <[email protected]>
date: Tue Jun 15 17:29:22 EDT 2021
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.
--- a/sys/src/cmd/git/import
+++ b/sys/src/cmd/git/import
@@ -37,7 +37,7 @@
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 @@
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 ''