4.2 sedit
注意 : Korn shell /bin/ksh 在你从Linux CD-ROM 安装 pdksh*.rpm 时会产生
请把他存成一般文字档并改变存取权限 chmod a+rx
--------------------------------------------------------------------------------
#!/bin/ksh
# CVS program sedit
# Program to check out the file from CVS read/write mode with locking
cmdname=`basename $0`
Usage()
{
# print " Usage: $cmdname [-r revision_number] [-F] "
# print "The options -r, -F are optional "
# print "The option -F is FORCE edit even if file is "
# print "locked by another developer"
print " Usage: $cmdname [-r revision_number] "
print "The options -r are optional "
print "For example - "
print " $cmdname -r 1.1 foo.cpp"
print " $cmdname foo.cpp "
# print " $cmdname -F foo.cpp "
print " "
}
# Command getopt will not supported in next major release.
# Use getopts instead.
#while getopts r:F ii
while getopts r: ii
do
case $ii in
r) FLAG1=$ii; OARG1="$OPTARG";;
# F) FLAG2=$ii; OARG2="$OPTARG";;
?) Usage; exit 2;;
esac
done
shift ` expr $OPTIND - 1 `
#echo FLAG1 = $FLAG1 , OARG1 = $OARG1
if [ $# -lt 1 ]; then
Usage
exit
fi
hme=` echo $HOME | cut -f1 -d' ' `
if [ "$hme" = "" ]; then
print " Error: $HOME is not set!! "
exit
fi
bkextn=sedit_bak
cur_dir=`pwd`
#echo $cur_dir
len=${#hme}
len=$(($len + 2))
#echo $len
subdir=` echo $cur_dir | cut -b $len-2000 `
#echo $subdir
if [ "$subdir" = "" ]; then
fdname=$1
else
fdname=$subdir"/"$1
fi
# If file is already checked out by another developer....
cvs_root=` echo $CVSROOT | cut -f1 -d' ' `
if [ "$cvs_root" = "" ]; then
print " Error: $CVSROOT is not set!! "
exit
fi
cldir=$CVSROOT/$subdir/Locks
mkdir $cldir 2>/dev/null
rcsfile=$CVSROOT/$subdir/$1,v
#echo $rcsfile
if [ ! -e $rcsfile ]; then
print " Error: File $1 does not exist in CVS repository!! "
exit
fi
# Get the tip revision number of the file....
# Use tmpfile as the arg cannot be set inside the sub-shell
tmpfile=$hme/sedit-lock.tmp
m -f $tmpfile 2>/dev/null
if [ "$FLAG1" = "" ]; then
(
cd $hme
cvs log $fdname | head -6 | grep head: | awk '{print $2}' > $tmpfile
)
OARG1=`cat $tmpfile`
m -f $tmpfile 2>/dev/null
fi
lockfile=$cldir/$1-$OARG1
#if [ -e $lockfile -a "$FLAG2" = "" ]; then
if [ -e $lockfile ]; then
print " Error: File $1 Revision $OARG1 already locked by another developer !!"
aa=` ls -l $lockfile | awk '{print "Locking developers unix login name is = " $3}' `
print $aa
print "That developer should do scommit OR sunlock to release the lock"
print " "
# print "You can also use -F option to force edit the file even if"
# print "the file is locked by another developer. But you must talk to"
# print "other developer to work concurrently on this file."
# print "For example - this option is useful if you work on a seperate"
# print "C++ function in the file which does not interfere with other"
# print "developer."
# print " "
exit
fi
# Get read-only copy now....
if [ ! -e $1 ]; then
(
cd $hme
cvs -r checkout $fdname 1>/dev/null
)
fi
# Check if file already exists....
if [ -f $1 ]; then
user_perms=" "
group_perms=" "
other_perms=" "
user_perms=`ls -l $1 | awk '{print $1 }' | cut -b3-3 `
group_perms=`ls -l $1 | awk '{print $1 }' | cut -b6-6 `
other_perms=`ls -l $1 | awk '{print $1 }' | cut -b9-9 `
if [ "$user_perms" = "w" -o "$group_perms" = "w"
-o "$other_perms" = "w" ]; then
print " Error: The file is writable. Aborting $cmdname ......"
print " You must backup, scommit or delete file and"
print " try $cmdname again "
exit
fi
#print " Note: The file $1 is read-only."
#print "Hence I am moving it to $1.$bkextn .... "
mv -f $1 $1.$bkextn
chmod 444 $1.$bkextn
elif [ -d $1 ]; then
print " Error: $1 is a directory and NOT a file. Aborting $cmdname .... "
exit
fi
# Create subshell
print " Now getting the file $1 from CVS repository ... "
(
cd $hme
#echo $fdname
# Use -A option to clear the sticky tag and to get
# the HEAD revision version
if [ "$FLAG1" = "" ]; then
cvs -w checkout -A $fdname
else
cvs -w checkout -A -$FLAG1 $OARG1 $fdname
fi
)
if [ -e $1 ]; then
touch $lockfile
fi
#pwd
print " Done $cmdname"
#print " Tip (Usage): $cmdname "
--------------------------------------------------------------------------------
4.3 scommit
注意 : Korn shell /bin/ksh 在你从Linux CD-ROM 安装 pdksh*.rpm 时会产生
请把他存成一般文字档并改变存取权限 chmod a+rx
--------------------------------------------------------------------------------
#!/bin/ksh
# CVS program scommit
# Program to commit the changes and check in the file into CVS
cmdname=`basename $0`
Usage()
{
print " Usage: $cmdname [-r revision_number] "
print "The options -r are optional "
print "For example - "
print " $cmdname -r 1.1 foo.cpp"
print " $cmdname foo.cpp "
print " "
}
# Command getopt will not supported in next major release.
# Use getopts instead.
while getopts r: ii
do
case $ii in
r) FLAG1=$ii; OARG1="$OPTARG";;
?) Usage; exit 2;;
esac
done
shift ` expr $OPTIND - 1 `
#echo FLAG1 = $FLAG1 , OARG1 = $OARG1
if [ $# -lt 1 ]; then
Usage
exit 2
fi
if [ -d $1 ]; then
Usage
exit 2
fi
hme=` echo $HOME | cut -f1 -d' ' `
if [ "$hme" = "" ]; then
print " Error: $HOME is not set!! "
exit
fi
# Find sub-directory
cur_dir=`pwd`
#echo $cur_dir
len=${#hme}
len=$(($len + 2))
#echo $len
subdir=` echo $cur_dir | cut -b $len-2000 `
#echo $subdir
if [ "$subdir" = "" ]; then
fdname=$1
else
fdname=$subdir"/"$1
fi
# If file is already checked out by another user....
cvs_root=` echo $CVSROOT | cut -f1 -d' ' `
if [ "$cvs_root" = "" ]; then
print " Error: $CVSROOT is not set!! "
exit
fi
cldir=$CVSROOT/$subdir/Locks
mkdir $cldir 2>/dev/null
# Get the working revision number of the file....
# Use tmpfile as the arg cannot be set inside the sub-shell
tmpfile=$hme/sedit-lock.tmp
m -f $tmpfile 2>/dev/null
if [ "$FLAG1" = "" ]; then
(
cd $hme
cvs status $fdname 2>/dev/null | grep "Working revision:" | awk '{print $3}' >$tmpfile
)
OARG1=`cat $tmpfile`
m -f $tmpfile 2>/dev/null
fi
if [ "$OARG1" = "" ]; then
print "The file $fdname is NEW, it is not in the CVS repository"
else
lockfile=$cldir/$1-$OARG1
if [ -e $lockfile ]; then
# Check if this revision is owned by you...
aa=` ls -l $lockfile | awk '{print $3}' `
userid=`id | cut -d'(' -f2 | cut -d')' -f1 `
if [ "$aa" != "$userid" ]; then
print " "
print "The file $fdname is NOT locked by you!!"
print "It is locked by unix user name $aa and your login name is $userid"
# print "If you are working concurrently with other developer"
# print "and you used -F option with sedit."
print "You need to wait untill other developer does scommit"
print "or sunlock"
print "Aborting the $cmdname ...."
print " "
exit 2
fi
else
if [ -f $CVSROOT/$subdir/$1,v ]; then
print "You did not lock the file $fdname with sedit!!"
print "Aborting the $cmdname ...."
exit 2
else
print " The file $fdname does not exist in CVS repository yet!!"
print "You should have done sadd on $fdname ...."
fi
fi
fi
if [ -d $1 ]; then
Usage
exit 2
# Do not allow directory commits for now ...
#cvs commit
else
cvs commit $1
exit_status=$?
fi
if [ $exit_status -eq 0 ]; then
print " Done $cmdname. $cmdname successful"
#print " Tip (Usage): $cmdname "
fi
--------------------------------------------------------------------------------