1 #!/bin/bash -e
2
3 TMP_DIR=/tmp
4
5 help()
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
12 continue_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
21 qc()
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
33 NO_COMPILE=false
34 AMEND=""
35
36 while 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
46 done
47
48 if [ ! -f $1 ] ; then
49 help
50 fi
51
52 fullname=$1
53 filename=$(basename $fullname)
54 oname=$(echo ${fullname/.c/.o})
55
56 MAIL_FILE=$TMP_DIR/${filename}.msg
57
58 echo "QC checklist"
59 qc "Have you handled all the errors properly?"
60 if git diff $fullname | grep ^+ | grep -qi alloc ; then
61 qc "Have you freed all your mallocs?"
62 fi
63 if git diff $fullname | grep ^+ | grep -qi alloc ; then
64 qc "Have you check all your mallocs for NULL returns?"
65 fi
66
67 if [ "$NO_COMPILE" != "true" ] ; then
68 kchecker --spammy $fullname
69 kchecker --sparse --endian $fullname
70 # rm $oname
71 # make C=1 CHECK="scripts/coccicheck" $oname
72 fi
73
74 grepmail $fullname ~/var/mail/sent* | grep -i ^subject || echo -n ""
75 qc "Looks OK?"
76
77 git log --oneline $fullname | head -n 10
78 echo "Copy and paste one of these subjects?"
79 read unused
80
81 git add $fullname
82 git commit --signoff $AMEND
83
84 to_addr=$(./scripts/get_maintainer.pl -f --noroles --norolestats $fullname | head -n 1)
85 cc_addr=$(./scripts/get_maintainer.pl -f --noroles --norolestats $fullname | tail -n +2 | \
86 perl -ne 's/\n$/, /; print')
87 cc_addr="$cc_addr, kernel-janitors@vger.kernel.org"
88
89 echo -n "To: " > $MAIL_FILE
90 echo "$to_addr" >> $MAIL_FILE
91 echo -n "CC: " >> $MAIL_FILE
92 echo "$cc_addr" >> $MAIL_FILE
93 echo "X-Mailer: git-send-email haha only kidding" >> $MAIL_FILE
94
95 git format-patch HEAD^ --stdout >> $MAIL_FILE
96
97 ./scripts/checkpatch.pl $MAIL_FILE || continue_yn
98
99 echo "Press ENTER to continue"
100 read unused
101
102 mutt -H $MAIL_FILE
|
1 #!/bin/bash -e
2
3 TMP_DIR=/tmp
4
5 help()
6 {
7 echo "Usage: $0 [--no-compile|--amend] <filename>"
8 echo "You must be at the base of the kernel tree to run this."
9 exit 1
10 }
11
12 continue_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
21 qc()
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
33 NO_COMPILE=false
34 AMEND=""
35
36 while true ; do
37 if [[ "$1" == "--no-compile" ]] ; then
38 NO_COMPILE=true
39 shift
40 elif [[ "$1" == "--amend" ]] ; then
41 AMEND="--amend"
42 shift
43 else
44 break
45 fi
46 done
47
48 if [ ! -f $1 ] ; then
49 help
50 fi
51
52 fullname=$1
53 filename=$(basename $fullname)
54 oname=$(echo ${fullname/.c/.o})
55
56 MSG_FILE=$TMP_DIR/${filename}.msg
57 MAIL_FILE=$TMP_DIR/${filename}.mail
58
59 # heat up the disk cache
60 #git log --oneline $fullname | head -n 10 > /dev/null &
61
62 echo "QC checklist"
63 qc "Have you handled all the errors properly?"
64 if git diff $fullname | grep ^+ | grep -qi alloc ; then
65 qc "Have you freed all your mallocs?"
66 fi
67 if git diff $fullname | grep ^+ | grep -qi alloc ; then
68 qc "Have you check all your mallocs for NULL returns?"
69 fi
70
71 if [ "$NO_COMPILE" != "true" ] ; then
72 kchecker --spammy $fullname
73 kchecker --sparse --endian $fullname
74 # rm $oname
75 # make C=1 CHECK="scripts/coccicheck" $oname
76 fi
77
78 for file in $(grep -l $fullname ~/var/mail/sent-*) ; do
79 grepmail $fullname $file | grep -i ^subject || echo -n ""
80 done
81 qc "Looks OK?"
82
83 git add $fullname
84
85 cat /dev/null > $MSG_FILE
86 if [ "$AMEND" != "" ] ; then
87 git format-patch HEAD^ --stdout >> $MSG_FILE
88 else
89 echo "" >> $MSG_FILE
90 echo "Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>" >> $MSG_FILE
91 echo "" >> $MSG_FILE
92 echo "# $sm_err" >> $MSG_FILE
93 fi
94 git log -10 --oneline $fullname | sed -e 's/^/# /' >> $MSG_FILE
95 vim $MSG_FILE
96
97 grep -v '^#' $MSG_FILE > $MSG_FILE.1
98 mv $MSG_FILE.1 $MSG_FILE
99
100 git commit $AMEND -F $MSG_FILE
101
102 to_addr=$(./scripts/get_maintainer.pl -f --noroles --norolestats $fullname | head -n 1)
103 cc_addr=$(./scripts/get_maintainer.pl -f --noroles --norolestats $fullname | tail -n +2 | \
104 perl -ne 's/\n$/, /; print')
105 cc_addr="$cc_addr, kernel-janitors@vger.kernel.org"
106
107 echo -n "To: " > $MAIL_FILE
108 echo "$to_addr" >> $MAIL_FILE
109 echo -n "CC: " >> $MAIL_FILE
110 echo "$cc_addr" >> $MAIL_FILE
111 echo "X-Mailer: git-send-email haha only kidding" >> $MAIL_FILE
112
113 git format-patch HEAD^ --stdout >> $MAIL_FILE
114
115 ./scripts/checkpatch.pl $MAIL_FILE || continue_yn
116
117 echo "Press ENTER to continue"
118 read unused
119
120 mutt -H $MAIL_FILE
|