shithub: plan9front

Download patch

ref: 7c3ff535745b373775fbdab74954e7717abbce84
parent: 21283578ebbc2663e698733a6d11ace0e98bc8a9
author: Ori Bernstein <ori@eigenstate.org>
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	Tue Jun 15 10:28:00 2021
+++ b/sys/src/cmd/git/import	Tue Jun 15 17:29:22 2021
@@ -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 ''