--- patchview.orig 2005-07-19 16:08:21.000000000 -0500 +++ patchview 2005-07-19 16:30:07.000000000 -0500 @@ -3,7 +3,6 @@ # License: GPL v2. # # uses patchutils (lsdiff) and tkdiff - # returns 'base' function strip_filename() { @@ -25,20 +24,55 @@ } force=0 -patchfile=$1 -srctree=$2 +single=0 VIEWER="tkdiff" # or maybe "sh -c colordiff" would work -if [ "$patchfile" == "-f" ]; then - force=1 - patchfile=$2 - srctree=$3 -fi +while [ -n "$1" ] +do + case $1 in + -f) + force=1 + ;; + + -s) + single=1 + ;; + -*) + if [ "${1#-}" = '?' ] + then + echo "usage: patchview [-f] [-s] patchfile srctree" + echo " -f : force tkdiff even if 'patch' has errors" + echo " -s : single tkdiff even if 'patch' contains multiple files" + exit 0 + fi + ;; + + *) + # Accept filename or report a warning + if [ -z "${patchfile}" ] + then + patchfile=$1 + srctree=$2 + break + else + echo "usage: patchview [-f] [-s] patchfile srctree" + echo " -f : force tkdiff even if 'patch' has errors" + echo " -s : single tkdiff even if 'patch' contains multiple files" + exit 0 + fi + ;; + esac + + # Shift argument 2 into argument 1's slot. Loop to check the argument. + shift +done + if [ "$patchfile" = "" -o "$srctree" = "" ]; then echo "usage: patchview [-f] patchfile srctree" echo " -f : force tkdiff even if 'patch' has errors" + echo " -s : single tkdiff even if 'patch' contains multiple files" exit 1 fi @@ -48,6 +82,10 @@ else TMPDIR=/tmp fi +if [ ! -d ${TMPDIR}/XXXXXX ];then + mkdir ${TMPDIR}/XXXXXX || echo "failed mktemp for patch files dir." +fi + WORKDIR=`mktemp -d -p ${TMPDIR}/XXXXXX` || echo "failed mktemp for patch files dir." pfiles=`lsdiff --strip 1 $patchfile` @@ -73,8 +111,13 @@ for pf in $pfiles ; do $VIEWER $WORKDIR/$pf.orig $WORKDIR/$pf & + if [ ${single} -eq 1 ];then + wait # for viewer to exit + fi done -wait # for all viewers to exit +if [ ${single} -eq 0 ];then + wait # for all viewers to exit +fi rm -rf $WORKDIR