summaryrefslogtreecommitdiff
path: root/sys/src/cmd/git
diff options
context:
space:
mode:
authorOri Bernstein <ori@eigenstate.org>2021-06-15 21:29:22 +0000
committerOri Bernstein <ori@eigenstate.org>2021-06-15 21:29:22 +0000
commit7c3ff535745b373775fbdab74954e7717abbce84 (patch)
tree0daf110dc3aeb98571251d95f486ef4a2afd45af /sys/src/cmd/git
parent21283578ebbc2663e698733a6d11ace0e98bc8a9 (diff)
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.
Diffstat (limited to 'sys/src/cmd/git')
-rwxr-xr-xsys/src/cmd/git/import14
1 files changed, 11 insertions, 3 deletions
diff --git a/sys/src/cmd/git/import b/sys/src/cmd/git/import
index 3d1424143..c89d52d6b 100755
--- a/sys/src/cmd/git/import
+++ b/sys/src/cmd/git/import
@@ -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 ''