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