blob: a6b7600775a8c06b9ae5dd2953c2c887fdac487a [file] [log] [blame]
#!/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