1#!/bin/bash -e 2 3TMP_DIR=/tmp 4 5help() 6{ 7 echo "Usage: $0 [--no-compile|--ammend] <filename>" 8 echo "You must be at the base of the kernel tree to run this." 9 exit 1 10} 11 12continue_yn() 13{ 14 echo -n "Do you want to fix these issues now? " 15 read ans 16 if ! echo $ans | grep -iq ^n ; then 17 exit 1; 18 fi 19} 20 21qc() 22{ 23 local msg=$1 24 local ans 25 26 echo -n "$msg: " 27 read ans 28 if ! echo $ans | grep -qi ^y ; then 29 exit 1 30 fi 31} 32 33NO_COMPILE=false 34AMEND="" 35 36while true ; do 37 if [[ "$1" == "--no-compile" ]] ; then 38 NO_COMPILE=true 39 shift 40 elif [[ "$1" == "--ammend" ]] ; then 41 AMEND="--amend" 42 shift 43 else 44 break 45 fi 46done 47 48if [ ! -f $1 ] ; then 49 help 50fi 51 52fullname=$1 53filename=$(basename $fullname) 54oname=$(echo ${fullname/.c/.o}) 55 56MAIL_FILE=$TMP_DIR/${filename}.msg 57 58echo "QC checklist" 59qc "Have you handled all the errors properly?" 60if git diff $fullname | grep ^+ | grep -qi alloc ; then 61 qc "Have you freed all your mallocs?" 62fi 63if git diff $fullname | grep ^+ | grep -qi alloc ; then 64 qc "Have you check all your mallocs for NULL returns?" 65fi 66 67if [ "$NO_COMPILE" != "true" ] ; then 68 kchecker --spammy $fullname 69 kchecker --sparse --endian $fullname 70# rm $oname 71# make C=1 CHECK="scripts/coccicheck" $oname 72fi 73 74grepmail $fullname ~/var/mail/sent* | grep -i ^subject || echo -n "" 75qc "Looks OK?" 76 77git log --oneline $fullname | head -n 10 78echo "Copy and paste one of these subjects?" 79read unused 80 81git add $fullname 82git commit --signoff $AMEND 83 84to_addr=$(./scripts/get_maintainer.pl -f --noroles --norolestats $fullname | head -n 1) 85cc_addr=$(./scripts/get_maintainer.pl -f --noroles --norolestats $fullname | tail -n +2 | \ 86 perl -ne 's/\n$/, /; print') 87cc_addr="$cc_addr, kernel-janitors@vger.kernel.org" 88 89echo -n "To: " > $MAIL_FILE 90echo "$to_addr" >> $MAIL_FILE 91echo -n "CC: " >> $MAIL_FILE 92echo "$cc_addr" >> $MAIL_FILE 93echo "X-Mailer: git-send-email haha only kidding" >> $MAIL_FILE 94 95git format-patch HEAD^ --stdout >> $MAIL_FILE 96 97./scripts/checkpatch.pl $MAIL_FILE || continue_yn 98 99echo "Press ENTER to continue" 100read unused 101 102mutt -H $MAIL_FILE 103