diff options
Diffstat (limited to 'mailimport')
-rwxr-xr-x | mailimport | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/mailimport b/mailimport new file mode 100755 index 000000000..edbde0e06 --- /dev/null +++ b/mailimport @@ -0,0 +1,120 @@ +#!/bin/bash +# Copyright (c) 2006 Mauro Carvalho Chehab (mchehab@infradead.org) +# This code is placed under the terms of the GNU General Public License +# +#This script is capable to mass import patches on a mbox file, test for it, allow +#comment editing and applying it. +# +#This script requires: +#1) git, since it uses gitimport to break a mbox into patches; +#2) hg mailqueue. It is easier to manage patches using mq, allowing to work with +# the patches before applying to the tree. + +head=v4l/scripts/hghead.pl + +if [ "$1" == "" ]; then + echo "Usage: $0 <mbox>" + exit +fi +MBOX=$1 + +if [ "$TMPDIR" == "" ]; then + TMPDIR=/tmp +fi + +DIR=$TMPDIR/mailimport$$ +mkdir $DIR +if [ "$?" != "0" ]; then + echo "*** Error at mkdir $DIR" + exit; +fi +trap "rm -rf $DIR" EXIT +TMP2=$DIR/patchheader + +apply_patch () { + next=$1 + + echo patch -s -t -p1 --dry-run -l -N -d linux -i $next + patch -s -t -p1 --dry-run -l -N -d linux -i $next + if [ "$?" != "0" ]; then + $head $next + echo "*** ERROR" + exit + fi + + nano $next + + unset cont + until [ "$cont" == "0" ]; do + cont=0 + $head $next >$TMP2 + + if [ "`grep 'Bad formed author' $TMP2`" != "" ]; then + echo Patch bad formed. Please fix. + sleep 1 + nano $next + cont=1 + fi + done + +# hg qnew doesn't support specifying a date +# date="`perl -ne '{ if ( s/^# Date: //) { print; } }' $TMP2`" +# echo "Patch date is $date" +# patch -s -t -p1 -l -N -d linux -i ../$next +# cd linux +# hg addremove `diffstat -p1 -l $next` +# cd .. + + name=`cat $next | perl -ne ' + if (s/Subject:\s+(.*)/$1/) { + m/\s*(.*)\s*\n/; + $_="$1"; + + tr/[A-Z]/[a-z]/; + s/[^a-z0-9]/_/g; + s/_+$//; + s/_+/_/g; + s/^v4l_dvb_\d+[a-z]*_//g; + + printf "%s.patch",$_; + exit; + }'` + + cat $next| grep -v "^#" >$TMPDIR/$name + + echo hg -m "`cat $TMP2|grep -v "^#"`" qnew $name + hg qnew -m "`cat $TMP2|grep -v "^#"`" $name + patch -s -t -p1 -l -N -d linux -i $next + hg qrefresh +} + +echo git-mailsplit $MBOX $DIR +echo -n "Number of patches at file: " +git-mailsplit $MBOX $DIR +echo + +for i in $DIR/*; do + cat $i| git-mailinfo $DIR/msg $DIR/patch>$DIR/author + cat $DIR/msg|grep -vi ^CC: >$DIR/msg2 + + cat $DIR/author|perl -ne "if (m/Author[:]\\s*(.*)\\n/) { \$auth=\$1; } else \ + { if (m/Email[:]\\s*(.*)\\n/) { print \"From: \$auth \<\$1\>\n\"; } else \ + { if (m/Subject[:]\\s*(.*)\\n/) { \ + \$sub=\$1; \ + \$sub=~ s;^(media|dvb|v4l|video|drivers|[-_/: \\t])*(.*);\$2;; \ + print \"Subject: \$sub\\n\"; \ + } else \ + { print; } } \ + }" >$DIR/author2 + + out=$DIR/patch.diff + + cat $DIR/author2 + + echo "Signed-off-by: $CHANGE_LOG_NAME <$CHANGE_LOG_EMAIL_ADDRESS>" >>$DIR/msg2 + + echo "cat $DIR/author2 $DIR/msg2 $DIR/patch >$out" + cat $DIR/author2 $DIR/msg2 $DIR/patch >$out + + apply_patch $out +done |