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