#! /bin/sh # # Usage: $0 # case $# in 4) base="$1" patched="$2" old="$3" new="$4" ;; *) echo Usage: "$0" ' ' 1>&2 exit 1 ;; esac if [ -e "$new" ]; then echo "$new exists!" 1>&2 exit 1 fi basedots=`echo "$base" | sed -e s/././g` patcheddots=`echo "$patched" | sed -e s/././g` rm -f .empty touch -t 197001010000.00 .empty mkdir -p "$new" sub1='1,2s/[A-Z][a-z][a-z] [A-Z][a-z][a-z] [ 0-9][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9] [0-9][0-9][0-9][0-9]$/Thu Jan 1 00:00:00 1970/' sub2='1,2s/[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9][.][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] [-+][0-9][0-9][0-9][0-9]$/Thu Jan 1 00:00:00 1970/' ( cd "$old" ; find . -type f -print ) | sed -e 's;^./;;' | sort | while read fn do f1="$base"/"$fn" f2="$patched"/"$fn" if [ ! -f "$f1" ]; then f1=.empty; fi if [ ! -f "$f2" ]; then f2=.empty; fi echo $fn diff -u "$f1" "$f2" | case "$f1" in .empty) case "$f2" in .empty) sed -e "$sub1" -e "$sub2" ;; *) sed -e '2s/+++ '$patcheddots'/+++ NEW/' -e "$sub1" -e "$sub2" ;; esac ;; *) case "$f2" in .empty) sed -e '1s/--- '$basedots'/--- OLD/' -e "$sub1" -e "$sub2" ;; *) sed -e '1s/--- '$basedots'/--- OLD/' -e '2s/+++ '$patcheddots'/+++ NEW/' -e "$sub1" -e "$sub2" ;; esac ;; esac > .difftmp if [ -s .difftmp ]; then ( ( : >"$new"/"$fn" ) 2> /dev/null ) || mkdir -p "$new/`echo \"$fn\" | sed -e 's;/[^/]*\$;;'`" cat .difftmp > "$new"/"$fn" fi done rm -f .empty .difftmp