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