| #!/bin/bash | 
 | # Barret Rhoden (brho@cs.berkeley.edu) | 
 | # Copyright 2016 Google Inc | 
 | # | 
 | # Converts an mbox to a patch set.  It's like git am, but it generates patches | 
 | # instead of applying them to your tree. | 
 | # | 
 | # Mostly, it is just git mailsplit and mailinfo, but it also handles rewritten | 
 | # 'From' fields that Gmail or Google Groups seem to generate. | 
 |  | 
 | PATCHDIR="${PATCHDIR:-../patches}" | 
 |  | 
 | usage() | 
 | { | 
 | 	echo "$0 <mbox>" | 
 | 	exit -1 | 
 | } | 
 |  | 
 | if [ $# -ne 1 ] | 
 | then | 
 | 	usage | 
 | fi | 
 |  | 
 | MBOX=$1 | 
 |  | 
 | ls $PATCHDIR/*.patch 2>/dev/null | 
 |  | 
 | if [ $? -eq 0 ] | 
 | then | 
 | 	echo "$PATCHDIR has patches, remove and try again" | 
 | 	exit -1 | 
 | fi | 
 |  | 
 | git mailsplit -o$PATCHDIR $MBOX > /dev/null | 
 | cd $PATCHDIR | 
 | for i in `ls` | 
 | do | 
 | 	# Gmail rewrites some Froms.  We'll catch it and replace From with | 
 | 	# X-Original-From | 
 | 	ORIGFROM=`grep "^X-Original-From" $i` | 
 | 	if [ $? -eq 0 ] | 
 | 	then | 
 | 		ORIGFROM=`echo $ORIGFROM | sed 's/^X-Original-From:/From:/g'` | 
 | 		sed -i "/^From:.*/c$ORIGFROM" $i | 
 | 	fi | 
 |  | 
 | 	git mailinfo MI_msg MI_patch < $i > MI_header | 
 |  | 
 | 	# We need a From: field, synthesized from Author and Email | 
 | 	AUTHOR=`grep "^Author:" MI_header | cut -f 2- -d' '` | 
 | 	EMAIL=`grep "^Email:" MI_header | cut -f 2- -d' '` | 
 |  | 
 | 	# Determine the subject for naming the patch, replace spaces and weird | 
 | 	# chars | 
 | 	SUBJECT=`grep "^Subject:" MI_header | cut -f 2- -d' ' | | 
 | 	         sed 's/[^[:alnum:]]/-/g'` | 
 |  | 
 | 	echo "From: $AUTHOR <$EMAIL>" > $i-$SUBJECT.patch | 
 | 	cat MI_header MI_msg MI_patch >> $i-$SUBJECT.patch | 
 |  | 
 | 	rm MI_header MI_msg MI_patch $i | 
 | done | 
 | cd - > /dev/null |