NOTE : Get the Korn shell /bin/ksh by installing pdksh*.rpm from the Linux contrib cdrom
Save this file as a text file and chmod a+rx on it.
#!/bin/ksh
# CVS program sdif
# Program to see difference of the working file with CVS copy
# Every filename is composed of 3 parts - Home directory, sub-directory
# and the filename. The full-path is $HOME/$subdir/$fname
# And in CVS the same directory structure is maintained (by
# variable $subdir) therefore in cvs we will have $CVSROOT/$subdir/$fname
# In this program these 4 variables $HOME, $CVSROOT, $subdir and $fname
# play an important role. For example, sample values can be like
# HOME=/home/aldev, subdir=myproject/src CVSROOT=/home/cvsroot
# and fname=foo.cpp
# Caution: Put double-quotes to protect the variables having
# spaces, like "$HOME/$subdir" if subdir is 'some foo.cpp'
cmdname=`basename $0`
Usage()
{
print "\nUsage: $cmdname <filename> "
print "$cmdname -r<rev1> -r<rev2> <filename> \n"
exit
}
homedir=` echo $HOME | cut -f1 -d' ' `
if [ "$homedir" = "" ]; then
print "\nError: \$HOME is not set!!\n"
exit
fi
FLAG1=""
FLAG2=""
OARG1=""
OARG2=""
# Command getopt will not supported in next major release.
# Use getopts instead.
while getopts r:r: ii
do
case $ii in
r)
if [ "$FLAG1" = "" ]; then
FLAG1=$ii;
OARG1="$OPTARG"
else
FLAG2=$ii;
OARG2="$OPTARG"
fi
;;
?) Usage; exit 2;;
esac
done
shift ` expr $OPTIND - 1 `
if [ "$FLAG2" = "" ]; then
FLAG2=r
OARG2=HEAD
fi
cur_dir=`pwd`
#echo $cur_dir
len=${#homedir}
len=$(($len + 2))
#echo $len
subdir=` echo $cur_dir | cut -b $len-2000 `
#echo "subdir is : " $subdir
tmpaa=`dirname $1`
if [ "$tmpaa" = "." ]; then
fname="$1"
if [ "$subdir" = "" ]; then
subdir=$tmpaa
fi
else
fname=`basename $1`
if [ "$subdir" = "" ]; then
subdir=$tmpaa
else
subdir="$subdir/$tmpaa"
fi
fi
#echo "subdir is : " $subdir
#echo "fname is : " $fname
# CVS directory in your local directory is required for all commands..
if [ ! -d "$homedir/$subdir/CVS" ]; then
#tmpaa=` (cd "$CVSROOT/$subdir"; find * -prune -type f -print | head -1 ) `
tmpaa=` (cd "$CVSROOT/$subdir"; find * -maxdepth 0 -type f -print | head -1 ) `
tmpbb=`basename $tmpaa | cut -d',' -f1 `
if [ "$tmpaa" = "" -o ! -f "$CVSROOT/$subdir/$tmpbb,v" ]; then
print "\nThe directory $homedir/$subdir/CVS does not exist"
print "You must do a sget on `basename $subdir` directory. Give -"
print " cd $homedir/`dirname $subdir` "
print " sget `basename $subdir` "
exit
else
# Now try to create CVS in local dir by sget
(
cd "$homedir"
if [ "$subdir" = "." ]; then # don't use dot, will mess up cvs
cvs -r checkout -A $tmpbb
else
cvs -r checkout -A "$subdir/$tmpbb"
fi
)
fi
fi
# Operate inside sub-shell
(
cd $homedir
if [ "$FLAG1" = "" ]; then
cvs diff -r HEAD "$homedir/$subdir/$fname" | less
else
cvs diff -$FLAG1 $OARG1 -$FLAG2 $OARG2 "$homedir/$subdir/$fname" | less
fi
)