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