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