If you want to use RCS instead of CVS then you can use the following shell scripts.
#!/bin/ksh
# cotree.sh (Check Out Tree shell script)
# cotree.sh - Check out the entire RCS directory
# Usage :
# This will get the all the directories
# unix> cotree.sh
#
# This will get just one single directory tree
# unix> cotree.sh <directory name>
# See also cofiles.sh
###############################################################
# Setting up RCS (Revision Control System)
# Install the RCS programs - which gives command co, ci, rcslog
# Create a rcs home directory where you want to put all the
# source code repository. Call this $RCSDIR=/home/rcs_version_control
# Setup up an environment variable RCSDIR=/home/rcs_version_control
# in $HOME/.profile file. Like -
# export RCSDIR=/home/rcs_version_control
# Create a directory structure under $RCSDIR and check in all your
# files using ci . See 'man ci'
# Now create a link from your home directory to your project
# under $RCSDIR
# cd $HOME
# mkdir $HOME/myproject
# cd $HOME/myproject
# and run this script to get all the files and directory tree
# cotree.sh
# This script will create the entire source-tree under user's
# home and also will have a soft link to RCS directories. Each
# user will run this script under his home directory.
###############################################################
check_out_directory()
{
# Root directory of RCS (revision control system)
# like RCSDIR=/home/rcs_version_control
RCSDIR=$1
DIRNAME=$2
# The given directory name must exist in rcs root directory
if [ "$DIRNAME" = "" -o ! -d $RCSDIR/$DIRNAME ]; then
print "\nDirectory DIRNAME=$DIRNAME does not exist!!"
print "\nAborting the program ... and exiting...\n"
exit
fi
mkdir -p $DIRNAME
ln -s $RCSDIR/$DIRNAME/RCS $DIRNAME
(
cd $DIRNAME
# This fails in case of filename=sample,vv
# which inside RCS will be RCS/sample,vv,v
# ls RCS | cut -d',' -f1 | xargs co
# Use match to end of name $, as below -
# Use ls RCS/* to avoid getting the names ./ and ../
#ls RCS/* | cut -d'/' -f2 | sed -e's/,v$//g' | xargs co
if [ -d RCS ]; then
ls RCS/* | cut -d'/' -f2 | sed -e's/,v$//g' | \
while read ii
do
#echo "ii is : $ii"
if [ -f "RCS/$ii,v" ]; then
co $ii
fi
done
fi
)
}
# Root directory of RCS (revision control system)
# like RCSDIR=/home/rcs_version_control
if [ "$RCSDIR" = "" -o ! -d $RCSDIR ]; then
print "\nDirectory RCSDIR=$RCSDIR does not exist!!"
print "\nAborting the program ... and exiting...\n"
exit
fi
#echo "rcsdir is : $RCSDIR"
# If a directory argument is passed, then check out all
# files for this directory only and exit.
if [ "$1" != "" ]; then
(cd $RCSDIR; find $1 -type d -print ) |
while read DIRNAME
do
#echo DIRNAME=$DIRNAME
#DIRNAME=c_src
# Send rcs root directory and dir name relative to rcs root dir
tmpaa=` basename $DIRNAME `
if [ "$tmpaa" != "RCS" ]; then
check_out_directory $RCSDIR $DIRNAME
fi
done
else
(cd $RCSDIR; find * -type d -print ) |
while read DIRNAME
do
echo DIRNAME=$DIRNAME
#DIRNAME=c_src
# Send rcs root directory and dir name relative to rcs root dir
tmpaa=` basename $DIRNAME `
if [ "$tmpaa" != "RCS" ]; then
check_out_directory $RCSDIR $DIRNAME
fi
done
fi
#!/bin/ksh
# cofiles.sh (Check Out files shell script)
# cofiles.sh - Check out all the files in current directory from RCS
# See also cotree.sh and 'man rcsclean'
if [ ! -d RCS ]; then
print "\nDirectory RCS does not exist!!"
print "\nAborting the program ... and exiting...\n"
exit
fi
#echo "No. of args = " $# " and all args " $@
while true
do
print -n "\n\nCheck-out all files in read-write mode? <y/n> [n]: "
read ans
if [ "$ans" = "" -o "$ans" = "n" -o "$ans" = "N" ]; then
ans="N"
break
elif [ "$ans" = "y" -o "$ans" = "Y" ]; then
ans="Y"
break
else
print "\nWrong entry! Try again!!"
fi
done
#echo "The ans is : " $ans
if [ $# -eq 0 ]; then
# The 'ls RCS' fails in case of filename=sample,vv in RCS/sample,vv,v
# ls RCS | cut -d',' -f1 | xargs co
# Use match to end of name $, as below -
if [ "$ans" = "Y" ]; then
ls RCS | sed -e's/,v$//g' | xargs co -l
else
ls RCS | sed -e's/,v$//g' | xargs co
fi
elif [ $# -eq 1 ]; then
if [ -f "RCS/$1,v" ]; then
# Here, in this case $1 will be like dbalter.sql
# and not like db*.sql....
#echo "One arg, no. of args = " $# " and all args " $@
if [ "$ans" = "Y" ]; then
co -l "$1"
else
co "$1"
fi
else
# For case where $1=db*.sql and there is no db*.sql in
# current directory
#echo "No files... no. of args = " $# " and all args " $@
tmpaa="RCS/$1,v" # will be like RCS/db*.sql,v
ls $tmpaa | \
while read ii
do
#echo "ii is : $ii"
if [ "$ans" = "Y" ]; then
co -l "$ii"
else
co "$ii"
fi
done
fi
else
for ii in $@
do
#echo "ii is : $ii,v"
if [ "$ans" = "Y" ]; then
co -l "$ii"
else
co "$ii"
fi
done
fi
#!/bin/ksh
# ciall.sh (Check in files shell script)
# ciall.sh - Check in all the files in current directory into RCS
# This script is very useful for checking in enmass large number
# of new files into RCS. Saves time by avoiding to type the
# 'description' for every file
# And for files already in RCS, it does regular check-in command
# To convert filenames to lower case filenames, use this
# technique - use 'tr', see 'man tr'
#ls * | \
#while read ii
#do
# jj=`echo $ii | tr [A-Z] [a-z] `
# echo "ii is : $ii"
# echo "jj is : $jj"
# mv $ii $jj
#done
if [ ! -d RCS ]; then
print "\nDirectory RCS does not exist!!"
print "\nWill be creating RCS directory now ...\n"
mkdir RCS
fi
print "\n\nNOTE: This is not log message!"
print "Please enter description (will be used for"
print -n "all the files checked in) : "
read description
# Option prune does not work, use -maxdepth 0
#find * -prune -type f |
# The number of args is zero or more....
if [ $# -eq 0 ]; then
listoffiles="*"
else
listoffiles="$@"
fi
# Option prune does not work, use -maxdepth 0
#find $listoffiles -prune -type f |
find $listoffiles -maxdepth 0 -type f |
while read ii
do
#echo $ii
if [ -f "RCS/$ii,v" ]; then
#print "The file $ii already in RCS"
ci -m"$description" $ii
else
#print "The file $ii is new file"
ci $ii << EOF
$description
EOF
fi
done