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 sadd
# Program to add the file to CVS
# 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`
if [ $# -lt 1 ]; then
print "\nUsage: $cmdname <filename/directory> \n"
exit
fi
onearg="$1"
if [ ! -f "$onearg" -a ! -d "$onearg" ]; then
print "\nArgument $onearg is not a file or a directory!"
print "Usage: $cmdname <filename/directory> \n"
exit
fi
# Argument is a directory name .....
homedir=` echo $HOME | cut -f1 -d' ' `
if [ "$homedir" = "" ]; then
print "\nError: \$HOME is not set!!\n"
exit
fi
cvs_root=` echo $CVSROOT | cut -f1 -d' ' `
if [ "$cvs_root" = "" ]; then
print "\nError: \$CVSROOT is not set!!\n"
exit
fi
cur_dir=`pwd`
len=${#homedir}
len=$(($len + 2))
subdir=` echo $cur_dir | cut -b $len-2000 `
#echo "subdir is : " $subdir
tmpaa=`dirname "$onearg" `
if [ "$tmpaa" = "." ]; then
fname="$onearg"
if [ "$subdir" = "" ]; then
subdir=$tmpaa
fi
else
fname=`basename "$onearg" `
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
# Check if file exists ....
if [ $# -eq 1 ]; then
if [ -f "$onearg" ]; then
cvs add "$onearg"
exit
fi
elif [ $# -gt 1 ]; then
print "\n\n\nAdding all the files in the current directory to CVS"
print "Directories will not be added"
print -n "Hit return to continue or CTRL+C to abort..."
read ans
for ii in $@
do
if [ -f "$ii" ]; then
cvs add "$ii"
fi
done;
exit
fi
# When $subdir is "." then you are at the root directory
if [ "$subdir" = "." ]; then
# The $onearg is a directory and not a file at this point...
if [ -d "$CVSROOT/$onearg" ]; then
print "\nDirectory $onearg already exists in CVSROOT"
exit
else
# You are adding at root directory $CVSROOT
if [ "$2" = "" -o "$3" = "" ]; then
print "\nUsage: $cmdname <directory> <vendor tag> <release tag>"
print "For example - "
print " $cmdname foo_directory V_1_0 R_1_0"
exit
else
(
cd "$homedir/$subdir";
cvs import "$onearg" $2 $3
)
fi
fi
else
# If current directory exists in CVS...
if [ -d "$CVSROOT/$subdir/$onearg" ]; then
print "\nDirectory $onearg already in CVS repository!"
exit
else
(
if [ -d "$homedir/$subdir/$onearg/CVS" ]; then
print "\nError: Directory $homedir/$subdir/$onearg/CVS exists!!"
print "\nAborting now ...."
exit
fi
# For import you MUST change to target directory
# and you MUST specify full-path starting with $subdir
cd "$homedir/$subdir/$onearg";
cvs import "$subdir/$onearg" Ver_1 Rel_1
)
fi
fi