Messages in this thread Patch in this message | | | Date | Tue, 19 Jul 2005 16:36:32 -0500 | From | "K.R. Foley" <> | Subject | Re: [announce] 'patchview' script |
| |
randy_dunlap wrote: > Hi, > > Someone asked me about a tool like this and I didn't know of one, > so I made this little script. > > 'patchview' merges a patch file and a source tree to a set of > temporary modified files. This enables better patch (re)viewing > and more viewable context. (hopefully) > > Are there already other tools that do something similar to this? > (other than SCMs) > > > The patchview script is here: > http://www.xenotime.net/linux/scripts/patchview > > usage: patchview [-f] patchfile srctree > -f : force tkdiff even if 'patch' has errors > > > It uses (requires) lsdiff (from patchutils) and tkdiff. > > patchutils: http://cyberelk.net/tim/patchutils/ > tkdiff: http://sourceforge.net/projects/tkdiff/ > > --- > ~Randy
Randy,
As Nick already pointed out, mktemp fails if the parent dir doesn't exist. The attached patch tries to create the parent if it doesn't exist. It also accepts a [-s] argument to bring up a single viewer at a time. Otherwise, if there are many different files being touched by the patch it dies a horrible death on my machine. Nice utility, btw.
-- kr --- 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 | |