]> git.lizzy.rs Git - plan9front.git/commitdiff
git/import: handle mails with line wrapping and mime
authorOri Bernstein <ori@eigenstate.org>
Tue, 15 Jun 2021 21:29:22 +0000 (21:29 +0000)
committerOri Bernstein <ori@eigenstate.org>
Tue, 15 Jun 2021 21:29:22 +0000 (21:29 +0000)
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.

sys/src/cmd/git/import

index 3d1424143efdeb1f8c95fa85f1eb28d2b8a0a0ff..c89d52d6b0a39af82a1a9ec54c8d18c3d3fc3b5f 100755 (executable)
@@ -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 ''