lkml.org 
[lkml]   [2005]   [Jul]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
SubjectRe: [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
\
 
 \ /
  Last update: 2005-07-19 23:40    [W:0.127 / U:0.276 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site