11f5207b7SJohn Levon#!/bin/bash -e 21f5207b7SJohn Levon 31f5207b7SJohn LevonTMP_DIR=/tmp 41f5207b7SJohn Levon 51f5207b7SJohn Levonhelp() 61f5207b7SJohn Levon{ 7efe51d0cSJohn Levon echo "Usage: $0 [--no-compile|--amend] <filename>" 81f5207b7SJohn Levon echo "You must be at the base of the kernel tree to run this." 91f5207b7SJohn Levon exit 1 101f5207b7SJohn Levon} 111f5207b7SJohn Levon 121f5207b7SJohn Levoncontinue_yn() 131f5207b7SJohn Levon{ 141f5207b7SJohn Levon echo -n "Do you want to fix these issues now? " 151f5207b7SJohn Levon read ans 161f5207b7SJohn Levon if ! echo $ans | grep -iq ^n ; then 171f5207b7SJohn Levon exit 1; 181f5207b7SJohn Levon fi 191f5207b7SJohn Levon} 201f5207b7SJohn Levon 211f5207b7SJohn Levonqc() 221f5207b7SJohn Levon{ 231f5207b7SJohn Levon local msg=$1 241f5207b7SJohn Levon local ans 251f5207b7SJohn Levon 261f5207b7SJohn Levon echo -n "$msg: " 271f5207b7SJohn Levon read ans 281f5207b7SJohn Levon if ! echo $ans | grep -qi ^y ; then 291f5207b7SJohn Levon exit 1 301f5207b7SJohn Levon fi 311f5207b7SJohn Levon} 321f5207b7SJohn Levon 331f5207b7SJohn LevonNO_COMPILE=false 341f5207b7SJohn LevonAMEND="" 351f5207b7SJohn Levon 361f5207b7SJohn Levonwhile true ; do 371f5207b7SJohn Levon if [[ "$1" == "--no-compile" ]] ; then 381f5207b7SJohn Levon NO_COMPILE=true 391f5207b7SJohn Levon shift 40efe51d0cSJohn Levon elif [[ "$1" == "--amend" ]] ; then 411f5207b7SJohn Levon AMEND="--amend" 421f5207b7SJohn Levon shift 431f5207b7SJohn Levon else 441f5207b7SJohn Levon break 451f5207b7SJohn Levon fi 461f5207b7SJohn Levondone 471f5207b7SJohn Levon 481f5207b7SJohn Levonif [ ! -f $1 ] ; then 491f5207b7SJohn Levon help 501f5207b7SJohn Levonfi 511f5207b7SJohn Levon 521f5207b7SJohn Levonfullname=$1 531f5207b7SJohn Levonfilename=$(basename $fullname) 541f5207b7SJohn Levononame=$(echo ${fullname/.c/.o}) 551f5207b7SJohn Levon 56efe51d0cSJohn LevonMSG_FILE=$TMP_DIR/${filename}.msg 57efe51d0cSJohn LevonMAIL_FILE=$TMP_DIR/${filename}.mail 58efe51d0cSJohn Levon 59efe51d0cSJohn Levon# heat up the disk cache 60efe51d0cSJohn Levon#git log --oneline $fullname | head -n 10 > /dev/null & 611f5207b7SJohn Levon 621f5207b7SJohn Levonecho "QC checklist" 631f5207b7SJohn Levonqc "Have you handled all the errors properly?" 641f5207b7SJohn Levonif git diff $fullname | grep ^+ | grep -qi alloc ; then 651f5207b7SJohn Levon qc "Have you freed all your mallocs?" 661f5207b7SJohn Levonfi 671f5207b7SJohn Levonif git diff $fullname | grep ^+ | grep -qi alloc ; then 681f5207b7SJohn Levon qc "Have you check all your mallocs for NULL returns?" 691f5207b7SJohn Levonfi 701f5207b7SJohn Levon 711f5207b7SJohn Levonif [ "$NO_COMPILE" != "true" ] ; then 721f5207b7SJohn Levon kchecker --spammy $fullname 731f5207b7SJohn Levon kchecker --sparse --endian $fullname 741f5207b7SJohn Levon# rm $oname 751f5207b7SJohn Levon# make C=1 CHECK="scripts/coccicheck" $oname 761f5207b7SJohn Levonfi 771f5207b7SJohn Levon 78efe51d0cSJohn Levonfor file in $(grep -l $fullname ~/var/mail/sent-*) ; do 79efe51d0cSJohn Levon grepmail $fullname $file | grep -i ^subject || echo -n "" 80efe51d0cSJohn Levondone 811f5207b7SJohn Levonqc "Looks OK?" 821f5207b7SJohn Levon 831f5207b7SJohn Levongit add $fullname 84efe51d0cSJohn Levon 85efe51d0cSJohn Levoncat /dev/null > $MSG_FILE 86efe51d0cSJohn Levonif [ "$AMEND" != "" ] ; then 87efe51d0cSJohn Levon git format-patch HEAD^ --stdout >> $MSG_FILE 88efe51d0cSJohn Levonelse 89efe51d0cSJohn Levon echo "" >> $MSG_FILE 90efe51d0cSJohn Levon echo "Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>" >> $MSG_FILE 91efe51d0cSJohn Levon echo "" >> $MSG_FILE 92efe51d0cSJohn Levon echo "# $sm_err" >> $MSG_FILE 93efe51d0cSJohn Levonfi 94efe51d0cSJohn Levongit log -10 --oneline $fullname | sed -e 's/^/# /' >> $MSG_FILE 95efe51d0cSJohn Levonvim $MSG_FILE 96efe51d0cSJohn Levon 97efe51d0cSJohn Levongrep -v '^#' $MSG_FILE > $MSG_FILE.1 98efe51d0cSJohn Levonmv $MSG_FILE.1 $MSG_FILE 99efe51d0cSJohn Levon 100efe51d0cSJohn Levongit commit $AMEND -F $MSG_FILE 1011f5207b7SJohn Levon 102*5a0e240fSJohn Levongit format-patch HEAD^ --stdout >> $MSG_FILE 103*5a0e240fSJohn Levon 104*5a0e240fSJohn Levonto_addr=$(./scripts/get_maintainer.pl --noroles --norolestats $MSG_FILE | head -n 1) 105*5a0e240fSJohn Levoncc_addr=$(./scripts/get_maintainer.pl --noroles --norolestats $MSG_FILE | tail -n +2 | \ 1061f5207b7SJohn Levon perl -ne 's/\n$/, /; print') 1071f5207b7SJohn Levoncc_addr="$cc_addr, kernel-janitors@vger.kernel.org" 1081f5207b7SJohn Levon 1091f5207b7SJohn Levonecho -n "To: " > $MAIL_FILE 1101f5207b7SJohn Levonecho "$to_addr" >> $MAIL_FILE 1111f5207b7SJohn Levonecho -n "CC: " >> $MAIL_FILE 1121f5207b7SJohn Levonecho "$cc_addr" >> $MAIL_FILE 1131f5207b7SJohn Levonecho "X-Mailer: git-send-email haha only kidding" >> $MAIL_FILE 1141f5207b7SJohn Levon 1151f5207b7SJohn Levongit format-patch HEAD^ --stdout >> $MAIL_FILE 1161f5207b7SJohn Levon 1171f5207b7SJohn Levon./scripts/checkpatch.pl $MAIL_FILE || continue_yn 1181f5207b7SJohn Levon 1191f5207b7SJohn Levonecho "Press ENTER to continue" 1201f5207b7SJohn Levonread unused 1211f5207b7SJohn Levon 1221f5207b7SJohn Levonmutt -H $MAIL_FILE 123*5a0e240fSJohn Levonrm -f $MSG_FILE 124