1 #!/bin/bash -e
2
3 usage()
4 {
5 echo "usage: $0 <patch file>"
6 exit 1
7 }
8
9 if [ "$1" = "" ] ; then
10 usage
11 fi
12
13 if [ "$1" = "--compile" ] ; then
14 compile=true
15 shift
16 fi
17
18 SCRIPT_DIR=$(dirname $0)
19 if [ -e $SCRIPT_DIR/kchecker ] ; then
20 KCHECKER=$SCRIPT_DIR/kchecker
21 STRIP=$SCRIPT_DIR/strip_whitespace.pl
22 elif which kchecker | grep kchecker > /dev/null ; then
23 KCHECKER=kchecker
24 STRIP=strip_whitespace.pl
25 else
26 echo "$SCRIPT_DIR"
27 echo "kchecker script not found."
28 exit 1
29 fi
30
31 PATCH=$1
32
33 files=$(grep ^+++ $PATCH | cut -f 1 | cut -b 5-)
34 if [ "$files" = "" ] ; then
35 usage
36 fi
37
38 if ! cat $PATCH | patch -p1 --dry-run > /dev/null ; then
39 echo "Couldn't apply patch"
40 exit 1
41 fi
42
43 before=$(mktemp /tmp/before.XXXXXXXXXX)
44 after=$(mktemp /tmp/after.XXXXXXXXXX)
45 tmpfile=$(mktemp)
46
47 for file in $files ; do
48 file=${file#*/}
49
50 $STRIP $file > $before
51 if [ "$compile" = "true" ] ; then
52 if ! $KCHECKER --test-parsing --outfile=$before $file ; then
53 echo "warning: compile failed."
54 fi
55 mv $before $tmpfile
56 $STRIP $file > $before
57 cat $tmpfile >> $before
58 fi
59 cat $PATCH | patch -p1
60 $STRIP $file > $after
61 if [ "$compile" = "true" ] ; then
62 if ! $KCHECKER --test-parsing --outfile=$after $file ; then
63 echo "warning: compile failed. *again*"
64 fi
65 mv $after $tmpfile
66 $STRIP $file > $after
67 cat $tmpfile >> $after
68 fi
69 cat $PATCH | patch -p1 -R
70
71 if [ ! -s $before ] ; then
72 echo "Error: No result"
73 exit 1
74 fi
75
76 if diff $before $after > /dev/null ; then
77 echo
78 echo Only white space changed
79 echo
80 else
81 echo '!!#$%@$%@^@#$^@#%@$%@$%@#%$@#%!!'
82 echo '!! !!'
83 echo '!! This patch changes stuff !!'
84 echo '!! !!'
85 echo '!!#$%@$%@^@#$^@#%@$%@$%@#%$@#%!!'
86
87 diff -u $before $after
88 fi
89 rm -f $before $after $tmpfile
90 done
91