日本免费精品_最新日韩一区_亚洲视频一区在线_a在线视频观看_天天射夜夜骑_粉嫩av一区二区三区_欧美中日韩免费视频_综合图区欧美_国内精品美女在线观看_午夜精品久久久久久久男人的天堂

首頁 > 學院 > 操作系統 > 正文

CVS RCS HOWTO 原始程式碼版本控制系統 (2)

2024-07-26 00:30:59
字體:
來源:轉載
供稿:網友
--------------------------------------------------------------------------------

4. Shell Scripts 
下面的 scripts 是基本 CVS 命令的集合,而且是 Korn shell 的 scripts 。你可以把他轉成 perl 或者 bash。你可以自己修改成你想要的樣子。這些只是運用基本 CVS 命令但有些特殊的花樣加在里面。例如, sedit 這個 script 提供了檔案鎖住的功能使得其他人知道有某人正在修改這個檔案,當然你也可以直接使用 CVS 命令而不用這些 scripts ,這些 scripts 只是在展示 CVS 是多麼的有彈性。 

把這些 scripts 復制到 /usr/local/bin 下,并且此目錄應該在你的 PATH 環境變數中。 

sget [-r revision_number]  要從 CVS 獲得一個唯讀檔案或整個唯讀目錄,請按 sget 
sedit [-r revision_number]  要修改一個一個程式碼時,這個 scripts 會做檔案鎖住的動作,因此沒有別人可以登出這個檔案了。當然你可以改變這個 script 成你想要的功能 - 例如不鎖住,只出現警告訊息,或者相反的,非常嚴謹的鎖檔案。請按 sedit 
scommit [-r revision_number]  要交出某個你修改的檔案或整個目錄。 把你的改變交給 CVS。請按 scommit 
supdate  要藉由從 CVS 得到最新的檔案來update 一個檔案或整個目錄。請按 supdate 
sunlock [-r revision_number]  要把因為用 sedit 後的檔案鎖關掉。這會釋放檔案鎖(Release File Lock)。請按 sunlock 
slist 要看目前正被你修改的檔案列表。做 'ls -l | grep | ...' 命令,請按 slist 
sinfo  要得到一個檔案的改版資訊。 請按 sinfo 
slog  要得到一個 CVS 檔案改版的歷史紀錄,請按 slog 
sdif  
sdif -r rev1 -r rev2  要得到你的檔案與 CVS 柜子里的檔案不同的地方在哪里。請按 sdif 

注意: sdif 只有一個 'f' ,因為這里已經有一個 unix 命令叫 'sdiff'。 


sadd  要新增一個檔案到 CVS 柜子里。請按 sadd 
sdelete  要從 CVS 柜子里清掉一個檔案。請按 sdelete 
sfreeze   要凍結原始碼 (freeze codes) ,這是將要發行 (release) 整個原始碼目錄樹。請按 sfreeze 
saddtree   要新增一個目錄樹到 CVS 。請按 saddtree 
例如 : 


--------------------------------------------------------------------------------

        cd $HOME;   
        sfreeze REVISION_1_0  srctree  


--------------------------------------------------------------------------------
這將會凍結原始碼,并貼上一個標簽 REVISION_1_0 ,如此一來你就可以稍後用版本名字登出整個目錄樹。 

                ******************************************************



4.1 sget 
注意 : Korn shell /bin/ksh 在你從linux CD-ROM 安裝 pdksh*.rpm 時就會產生 

請把他存成一般文字檔并改變存取權限 chmod a+rx 



--------------------------------------------------------------------------------

#!/bin/ksh

# CVS PRogram sget
# Program to check out the file from CVS read-only

cmdname=`basename $0`

Usage()
{
        print "/nUsage: $cmdname [-r revision_number/symbolic_tag_name]  "
        print "The options -r are optional "
        print "For example - "
        print " $cmdname -r 1.1 foo.cpp"
        print " $cmdname foo.cpp "
        print " $cmdname some_directory "
        print "Extract by symbolic revision tag like - "
        print " $cmdname -r REVISION_1 some_directory "
        print " "
        exit
}

# 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
fi

bkextn=sget_bak

hme=` echo $HOME | cut -f1 -d' '  `
if [ "$hme" = "" ]; then
        print "/nError: /$HOME is not set!!/n"
        exit
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 "/nError: The file is writable. Aborting $cmdname ......"
                print "       You should either backup, scommit or delete the file and"
                print "       try $cmdname again/n"
                exit
        fi
fi

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

# Move the file
touch $1 2>/dev/null
/mv -f $1 $1.$bkextn

# Create subshell
(
cd $hme
#echo $fdname

# Use -A option to clear all sticky flags
if [ "$FLAG1" = "" ]; then
        cvs -r checkout -A $fdname
else
        cvs -r checkout -A -$FLAG1 $OARG1 $fdname
fi
)
#pwd

if [ -f $1 ]; then
        print "/nREAD-ONLY copy of the file $fdname obtained."
        print "Done $cmdname"
        #print "/nTip (Usage): $cmdname  /n"
fi


--------------------------------------------------------------------------------

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 "/nUsage: $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 "/nUsage: $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 "/nError: /$HOME is not set!!/n"
        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 "/nError: /$CVSROOT is not set!!/n"
        exit
fi
cldir=$CVSROOT/$subdir/Locks
mkdir $cldir 2>/dev/null
rcsfile=$CVSROOT/$subdir/$1,v
#echo $rcsfile

if [ ! -e $rcsfile ]; then
        print "/nError: File $1 does not exist in CVS repository!!/n"
        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
/rm -f $tmpfile 2>/dev/null
if [ "$FLAG1" = "" ]; then
        (
        cd $hme
        cvs log $fdname | head -6 | grep head: | awk '{print $2}' > $tmpfile 
        )
        OARG1=`cat $tmpfile`
        /rm -f $tmpfile 2>/dev/null
fi

lockfile=$cldir/$1-$OARG1
#if [ -e $lockfile -a "$FLAG2" = "" ]; then
if [ -e $lockfile ]; then
        print "/nError: 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 "/nError: The file is writable. Aborting $cmdname ......"
                print "       You must backup, scommit or delete file and"
                print "       try $cmdname again/n"
                exit
        fi
        #print "/nNote: The file $1 is read-only."
        #print "Hence I am moving it to $1.$bkextn ..../n"
        /mv -f $1 $1.$bkextn
        chmod 444 $1.$bkextn
elif [ -d $1 ]; then
        print "/nError: $1 is a directory and NOT a file. Aborting $cmdname ..../n"
        exit
fi

# Create subshell
print "/nNow getting the file $1 from CVS repository .../n"
(
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 "/nDone $cmdname"
#print "/nTip (Usage): $cmdname  /n"


--------------------------------------------------------------------------------

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 "/nUsage: $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 "/nError: /$HOME is not set!!/n"
        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 "/nError: /$CVSROOT is not set!!/n"
        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
/rm -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`
        /rm -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 "/nThe 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 "/nDone $cmdname. $cmdname successful"
        #print "/nTip (Usage): $cmdname /n"
fi


--------------------------------------------------------------------------------

4.4 supdate 
注意 : Korn shell /bin/ksh 在你從Linux CD-ROM 安裝 pdksh*.rpm 時就會產生 

請把他存成一般文字檔并改變存取權限 chmod a+rx 



--------------------------------------------------------------------------------

#!/bin/ksh

# CVS program supdate
# Program to update the file from CVS read/write mode

cmdname=`basename $0`

if [ $# -lt 1 ]; then
        print "/nUsage: $cmdname "
        exit
fi

# Check if file already exists....
if [ $# -gt 0 -a  -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
                while :
                do
                        print "/n$cmdname will backup your working file "
                        print "$1 to $1.supdate_bak before doing any merges."
                        print "Are you sure you want the merge the changes from"
                        print -n "CVS repository to your working file ?  [n]: "
                        read ans
                        if [ "$ans" = "y" -o "$ans" = "Y" ]; then
                                if [ -f $1.supdate_bak ]; then
                                        print "/nWarning : File $1.supdate_bak already exists!!"
                                        print "Please examine the file $1.supdate_bak and delete it"
                                        print "and than re-try this $cmdname "
                                        print "Aborting $cmdname ...."
                                        exit
                                else
                                        cp $1 $1.supdate_bak
                                        break
                                fi
                        elif [ "$ans" = "n" -o "$ans" = "N" -o "$ans" = "" -o "$ans" = " " ]; then
                                exit
                        fi
                done
        fi
fi

if [ -d $1 ]; then
        print "/nDirectory update is disabled as cvs update"
        print "merges the changes from repository to your working directory"
        print "So give the filename to update - as shown below: "
        print " Usage: $cmdname "
        exit
#       cvs update
else
        cvs update $1
fi

print "/nDone $cmdname. $cmdname successful"
#print "/nTip (Usage): $cmdname /n"


--------------------------------------------------------------------------------

4.5 sunlock 
注意 : Korn shell /bin/ksh 在你從Linux CD-ROM 安裝 pdksh*.rpm 時就會產生 

請把他存成一般文字檔并改變存取權限 chmod a+rx. 



--------------------------------------------------------------------------------

#!/bin/ksh
# CVS program sunlock
# Program to unlock the file to release the lock done by sedit

cmdname=`basename $0`

Usage()
{
        print "/nUsage: $cmdname [-r revision_number] "
        print " The options -r is 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 `

if [ $# -lt 1 ]; then
        Usage
        exit
fi

hme=` echo $HOME | cut -f1 -d' '  `
if [ "$hme" = "" ]; then
        print "/nError: /$HOME is not set!!/n"
        exit
fi

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 "/nError: /$CVSROOT is not set!!/n"
        exit
fi
cldir=$CVSROOT/$subdir/Locks
rcsfile=$CVSROOT/$subdir/$1,v
#echo $rcsfile

if [ ! -e $rcsfile ]; then
        print "/nError: File $1 does not exist in CVS repository!!/n"
        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
/rm -f $tmpfile 2>/dev/null
if [ "$FLAG1" = "" ]; then
        (
        cd $hme
        cvs log $fdname | head -6 | grep head: | awk '{print $2}' > $tmpfile 
        )
        OARG1=`cat $tmpfile`
        /rm -f $tmpfile 2>/dev/null
fi

lockfile=$cldir/$1-$OARG1
#echo lockfile is : $lockfile
if [ ! -e $lockfile ]; then
        print "/nFile $1 revision $OARG1 is NOT locked by anyone"
        print " "
        exit 
fi

ans=""
while :
do
        print "/n/n***************************************************"
        print "WARNING: $cmdname will release lock and enable other"
        print "         developers to edit the file. It is advisable"
        print "         to save your changes with scommit command"
        print "***************************************************"
        print -n "/nAre you sure you want to unlock the file ? [n]: "
        read ans
        if [ "$ans" = "" -o "$ans" = " " -o "$ans" = "n" -o "$ans" = "N" ]; then
                print "/nAborting $cmdname ...."
                exit
        fi
        if [ "$ans" = "y" -o "$ans" = "Y" ]; then
                print "/n/n/n/n/n "
                print "CAUTION: You may lose all the changes made to file!!"
                print -n "Do you really want to unlock the file ? [n]: "
                read ans
                if [ "$ans" = "y" -o "$ans" = "Y" ]; then
                        break
                else
                        exit
                fi
        else
                print "/n/nWrong entry. Try again..."
                sleep 1
        fi
done

if [ -e $lockfile ]; then
        /rm -f $lockfile
        print "/nDone $cmdname"
else
        print "/nFile $1 is NOT locked by anyone"
        print " "
fi


--------------------------------------------------------------------------------

4.6 slist 
注意 : Korn shell /bin/ksh 在你從Linux CD-ROM 安裝 pdksh*.rpm 時就會產生 

請把他存成一般文字檔并改變存取權限 chmod a+rx 



--------------------------------------------------------------------------------

#!/bin/ksh

# CVS program slist
# Program to list all edited source files from CVS

#cmdname=`basename $0`

#echo "no of params : " $#
#echo "all args : " $@

recurse_flag=""

if [ "$1" = "" ]; then
        dir=.
        recurse_flag=""
else
        dir=$@
        recurse_flag=" -prune "
fi

FOUT=slist_temporary_file.out

/rm -f $FOUT

find $dir  $recurse_flag -type f -exec ls -ltr {} /; /
| grep -v "/CVS/" /
| grep ^/-rw /
| grep -v //.o /
| grep -v //.log /
| grep -v //.out /
| grep -v //.pid /
| awk '{ if ($NF != "tags") print $0 }' /
| awk '{ if ($NF != "a.out") print $0 }' /
| awk '{ if ($NF != "core") print $0 }' /
| awk '{ print $NF }' > $FOUT

aa=`cat $FOUT`
/rm -f $FOUT

for ii in $aa ; do
        ftype=" "
        ftype=`file $ii | awk '{print $2 }' `

        # find . -type f -exec file {} /;
        # 1)ELF 2)commands 3)[nt]roff, 4)c 5)English  6)executable
        # 7)ascii 8)current 9)empty
        # Binaries are ELF, lib.a are current
        #
        if [ "$ftype" = "ascii" -o "$ftype" = "commands" /
                -o "$ftype" = "[nt]roff," -o "$ftype" = "c" -o "$ftype" = "data" /
                -o "$ftype" = "English" -o "$ftype" = "executable" ]; then
                pcfile=` echo $ii | cut -d'.' -f1`
                pcfile=${pcfile}".pc"
                if [ ! -f $pcfile ]; then
                        ls -l $ii
                else
                        if [ "$ii" = "$pcfile" ]; then
                                ls -l $ii
                        fi
                fi
        fi
done;

#| grep -v ^/-rwx /

#ls -l | grep ^/-rw | grep -v //.o
#ls -l | grep ^/-rw | grep -v //.o | awk '{ if ($NF != "tags") print $0 }'
#ls -l | grep ^/-rw | grep -v ^/-rwx | grep -v //.o |  awk '{ if ($NF != "tags") print $0 }' | awk '{ if ($NF != "core") print $0 }'

#print "/nDone $cmdname. $cmdname successful"
#print "/nTip (Usage): $cmdname /n"


--------------------------------------------------------------------------------

4.7 sinfo 
注意 : Korn shell /bin/ksh 在你從Linux CD-ROM 安裝 pdksh*.rpm 時就會產生 

請把他存成一般文字檔并改變存取權限 chmod a+rx 



--------------------------------------------------------------------------------

#!/bin/ksh

# CVS program sinfo
# Program to get the status of files in working directory

cmdname=`basename $0`

if [ $# -lt 1 ]; then
        print "/nUsage: $cmdname [file/directory name] "
        print "For example - "
        print " $cmdname foo.cpp"
        print " $cmdname some_directory "
        print " "
        exit
fi

hme=` echo $HOME | cut -f1 -d' '  `
if [ "$hme" = "" ]; then
        print "/nError: /$HOME is not set!!/n"
        exit
fi

tmpfile=$hme/cvs_sinfo.tmp
rm -f $tmpfile

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

# Create subshell
if [ -f $1 ]; then
        (
        cd $hme
        clear
        cvs status $fdname 
        )
elif [ -d $1 ]; then
        (
        cd $hme
        clear
        echo "  " >> $tmpfile
        echo "  ****************************************" >> $tmpfile
        echo "        Overall Status of Directory" >> $tmpfile
        echo "  ****************************************" >> $tmpfile
        cvs release $fdname 1>>$tmpfile 2>>$tmpfile << EOF
Y
EOF
        echo "/n   -------------------------------/n" >> $tmpfile

        aa=`cat $tmpfile | grep ^"M " | awk '{print $2}' `
        for ii in $aa 
        do
                jj="(cd $hme; cvs status $subdir/$ii );"
                echo $jj | /bin/sh  /
                        | grep -v Sticky | awk '{if (NF != 0) print $0}' /
                        1>>$tmpfile 2>>$tmpfile 
        done

        cat $tmpfile | grep -v ^? | grep -v "Are you sure you want to release" /
        | less
        rm -f $tmpfile
        )
else
        print "/nArgument $1 if not a file or directory"
        exit
fi


--------------------------------------------------------------------------------

4.8 slog 
注意 : Korn shell /bin/ksh 在你從Linux CD-ROM 安裝 pdksh*.rpm 時就會產生 

請把他存成一般文字檔并改變存取權限 chmod a+rx 



--------------------------------------------------------------------------------

#!/bin/ksh

# CVS program slog
# Program to list history of the file in CVS 

cmdname=`basename $0`

if [ $# -lt 1 ]; then
        print "/nUsage: $cmdname  /n"
        exit
fi

# Check if file does not exist....
if [ ! -f $1 ]; then
        print "/nError: $1 is NOT a file. Aborting $cmdname ......"
        exit
fi

cvs log $1 | /usr/local/bin/less

print "/nDone $cmdname. $cmdname successful"
#print "/nTip (Usage): $cmdname /n"


--------------------------------------------------------------------------------

4.9 sdif 
注意 : Korn shell /bin/ksh 在你從Linux CD-ROM 安裝 pdksh*.rpm 時就會產生 

請把他存成一般文字檔并改變存取權限 chmod a+rx 



--------------------------------------------------------------------------------

#!/bin/ksh

# CVS program sdif
# Program to see difference of the working file with CVS copy

cmdname=`basename $0`

Usage()
{
        print "/nUsage: $cmdname  "
        print "$cmdname -r -r  /n"
        exit
}
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

if [ "$FLAG1" = "" ]; then
        cvs diff -r HEAD $1 | less
else
        cvs diff -$FLAG1 $OARG1 -$FLAG2 $OARG2 $1 | less
fi


--------------------------------------------------------------------------------

4.10 sadd 
注意 : Korn shell /bin/ksh 在你從Linux CD-ROM 安裝 pdksh*.rpm 時就會產生 

請把他存成一般文字檔并改變存取權限 chmod a+rx 



--------------------------------------------------------------------------------

#!/bin/ksh

# test
# CVS program sadd
# Program to add the file to CVS

cmdname=`basename $0`
if [ $# -lt 1 ]; then
        print "/nUsage: $cmdname  /n"
        exit
fi

# Check if file exists ....
if [ -f $1 ]; then
        cvs add $1
        exit
fi

if [ ! -d $1 ]; then
&n
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
天天综合天天综合| 日韩免费视频| 在线精品视频免费播放| 一区二区视频免费看| 亚洲免费精品视频| 亚洲欧洲精品在线| 日韩中文字幕网| 中文字幕日韩欧美在线视频| 国产一级久久久| 亚洲精品欧美二区三区中文字幕 | 天天综合天天综合| 国产不卡在线| 国产欧美三级| 一区二区欧美国产| 极品久久久久久| 欧美一级久久久久久久久大| 中文官网资源新版中文第二页在线观看| 999精品视频在线观看播放| 一二三区精品福利视频| 91精品国产高清91久久久久久| 日韩一级视频在线观看| 日韩在线播放一区二区| 精品色蜜蜜精品视频在线观看| 国产成人精品免费网站| 中文字幕欧美人妻精品一区蜜臀 | 99久久久精品免费观看国产| 久久久久久久久综合| 成人久久久久| 国产欧美日韩91| 日韩一级网站| 日韩欧美中文视频| 久久福利视频一区二区| 日本精品专区| 精品熟女一区二区三区| 亚洲国内精品视频| 国产福利在线看| 久久99精品久久久久子伦| 视频一区二区中文字幕| 黄色资源在线观看| 欧美一级欧美三级在线观看| 日本精品在线中文字幕| 国产三级中文字幕| 欧美日韩国产影片| 国产一区在线不卡| 激情五月综合| 1区不卡电影| 国产高清在线观看| 国产69精品久久久久孕妇国产69久久| 日韩一级二级三级精品视频| 亚洲福利精品在线| 国产福利一区二区精品秒拍| 黄色国产在线| 在线观看av的网站| 亚洲中午字幕| 午夜亚洲一区| 精品久久电影| 日韩欧美在线中文字幕| 日韩精品视频在线免费观看| 亚洲国产91精品在线观看| 欧美.日韩.国产.一区.二区| 国产黄在线播放| 免费精品国产自产拍观看| 欧美日韩综合在线观看| 亚洲欧美小说国产图片| а√天堂8资源中文在线| 国产中文在线播放| 精品国产99| 欧美日韩国产在线播放| 欧美在线日韩在线| 国产日韩中文在线| 免费视频中文字幕| 日韩欧美中文免费| 中文字幕线观看| 在线日韩欧美| 一区二区欧美国产| 中文字幕成人乱码在线电影| 国产字幕在线看| 亚洲福利一区二区三区| 中文字幕在线导航| 国产亚洲一区字幕| 国产日产一区二区三区| 91精品日本| 日韩在线视频免费观看| 日韩午夜黄色| wwwwww国产| 精品视频—区二区三区免费| www.狠狠干| 日韩欧美中文字幕在线观看| 国产激情99| 91久久精品网| av一卡二卡| 97久久精品午夜一区二区| 樱花草www在线观看| 欧美一级免费观看| 日韩免费电影网站| 91一区二区| 中文字幕国产视频| 日韩精品手机在线| 欧美三级日韩在线| 亚洲素人一区二区| 亚洲制服一区| 久久精品卡一| 国产亚洲福利| 在线视频1区2区| 精品综合久久久久| 亚洲一区三区在线观看| 国产欧美日韩亚州综合| 国内精品99| 日韩免费视频| 国产激情在线播放| 久久人人精品| 91精品国产经典在线观看| 欧美日韩一二| 亚洲制服一区| 亚洲黄页一区| 日韩免费视频一区| 久久精品一级爱片| 日韩视频在线一区| 国产中文在线观看| 国产一卡二卡3卡4卡四卡在线| 欧美日韩在线视频免费观看| 国产福利第一页| av免费看在线| 日韩三级精品电影久久久| 欧美在线日韩| 精品国产999| 中文字幕久久av| 在线观看免费国产小视频| 中文字幕中文字幕精品| 欧美久久久久久蜜桃| 极品久久久久久| 香蕉av一区| 亚洲素人一区二区| 精人妻一区二区三区| 亚洲国产欧美日韩在线| 在线资源av| 中文字幕99| 精品国产99| 日韩在线观看视频一区二区| 欧美大片在线观看一区| 亚洲一区精品电影| 成人久久久久| 午夜国产福利一区二区| 日韩美女视频一区二区在线观看| 国产欧美日韩综合| 婷婷中文字幕在线观看| 国产一区在线观看视频| 国产99在线 | 亚洲| 中文字幕精品国产| 久精品在线观看| 欧美日韩人人澡狠狠躁视频| 伊人网站在线| 日韩中文字幕亚洲| 欧美不卡视频一区| 国产高清一级片| 国产婷婷在线观看| 欧美日韩国产中字| 快she精品国产999| www 日韩| 国产黄色在线| 午夜国产视频| 午夜成人鲁丝片午夜精品| 中文精品电影| √天堂资源中文www| 欧美日韩免费高清| 精品成人久久av| 欧美日韩午夜精品| 欧美在线观看视频一区| 欧美一级手机免费观看片| 欧美日韩国产成人| www.精品视频| 午夜私人影院在线观看| 中文精品在线观看| 欧美 日韩 中文字幕| 在线一区二区不卡| 天堂精品高清1区2区3区| 搞黄在线观看| 老司机久久99久久精品播放免费| 在线视频1区2区| 亚洲一级网站| 国产99在线|亚洲| 91精品xxx在线观看| 亚洲中午字幕| 精品国产999| 日本不卡高清视频一区| 99精品在线播放| 国产视频中文字幕在线观看| xxxcom在线观看| 日韩精品视频在线观看网址 | 亚洲免费观看视频| 日韩av一区二区在线观看| 精品视频999| 91精品啪在线观看国产60岁| 欧美三级在线视频| 国产黄色高清在线| 日韩欧美中文字幕在线播放| 91精品在线免费| 国产高清在线观看| 一区二区在线观| 亚洲免费婷婷| 91精品视频观看| 国产一二三视频| 日韩欧美高清在线| 黄色在线播放网站| 亚洲.国产.中文慕字在线| 中文字幕精品一区二区三区在线| 日韩欧美在线字幕| 国产wwww| 欧美中文字幕视频| 中文字幕亚洲二区 | 天天综合天天做| 香蕉人人精品| 国产欧美日韩第一页| 一区二区三区在线不卡| 精品999视频| 日韩免费视频一区二区视频在线观看 | 91精品在线观看国产| 在线看的av| 日韩欧美99| 亚洲免费视频一区| 在线欧美一级视频| 欧美一级在线观看| 国产资源在线观看入口av| 视频一区二区精品的福利| 欧美日韩中文字幕在线视频| 日韩av中文字幕一区| 91欧美日韩麻豆精品| 中文字幕不卡三区| 欧美1234区| 欧美,日韩,国产在线| 国产丝袜欧美中文另类| 日韩欧美看国产| 不卡一二三区| 欧美日韩一二| 免费视频久久| 1区2区在线| 精产国产伦理一二三区| 一本大道一区二区三区| 国产不卡的av| 国产黄色网页| 樱花草www在线观看| 欧美日韩在线观看首页| 欧美特黄一区| 精品亚洲国内自在自线福利| 久久婷婷国产| 国产日韩成人精品| 亚洲一区在线观看视频| 欧美日韩中文字幕在线视频| 中文字幕亚洲一区在线观看| 亚洲成年人影院在线| 中文字幕日韩在线观看| 欧美日韩国产影片| 中文字幕在线观看精品| 日韩在线不卡| 一区二区视频在线| 久久夜色精品国产噜噜亚洲av| 国产黄在线观看| 免费在线亚洲| 视频一区不卡| av免费观看网站| 欧美日韩亚洲国产综合| 一区二区在线高清视频| 天堂精品高清1区2区3区| 精品在线91| 99久久久精品免费观看国产| 国产黄色高清在线| 国产欧美日韩精品在线| www.狠狠干| 国产在线精品国自产拍免费| 国产高潮久久久| 日韩欧美在线看| 久久精品日韩无码| 亚洲欧美999| 国产黄在线看| 91精品国产手机| 不卡在线一区二区| 欧美 日韩 国产在线观看| 日韩高清不卡一区| 久艹在线视频| 欧美高清一级片在线| 亚洲一区激情| 影音先锋中文字幕在线观看| 天天综合日日夜夜精品| 国产一二三区精品视频| 中文网丁香综合网| 精品国产31久久久久久| 精品国产欧美| 国产日韩电影| 亚洲一二三不卡| 国产 欧美 日韩 在线| 久久精品网站免费观看| а√天堂中文在线资源8| 精品免费久久久| 欧美中文字幕视频| 欧美中文字幕在线观看视频| 欧美日韩三级一区| 一二三区精品福利视频| 国产网站欧美日韩免费精品在线观看| 亚洲视频色图| 日韩欧美综合| 日韩中文字幕| 日韩精品视频免费| 中文字幕亚洲字幕| 国产亚洲污的网站| 国产欧美中文在线| 欧美日韩国产中文| 国产欧美日韩中文字幕| 狠狠色综合色区| 国产三级免费观看| 亚洲3区在线| 精品国产31久久久久久| 欧美三级日韩三级国产三级| 日韩在线视频免费观看| 精品免费久久久| 欧美.日韩.国产.一区.二区| 国产成人精品免费网站| 欧美日韩国产91| 不卡专区在线| 国产 欧美在线| 91精品婷婷国产综合久久| 亚洲伊人婷婷| 一级片在线免费看| 亚洲国内精品视频| 99精品一级欧美片免费播放| 国产无遮挡在线视频免费观看| 亚洲视频电影在线| 91久久精品国产91性色69| 日韩精品中文字幕第1页| 久久久久久久久99精品| 天堂在线一区二区三区| 欧美日韩视频免费看| 日韩中文字幕视频在线观看| 蜜臀国产一区| 在线不卡日本| 精品在线91| 国产成人精品av久久| 日韩区欧美区| 午夜黄色小视频| 欧美日韩国产影片| 亚洲国产91精品在线观看| 欧美日韩综合在线观看| 国产福利一区在线观看| 国产视频一区三区| 国产黄色在线| 久久婷婷中文字幕| 亚洲 欧美综合在线网络| av影视在线看| 国产成人精品亚洲| 欧美国产亚洲一区| 国产日韩成人精品| 一区三区二区视频| 精品中文在线| 日韩福利视频导航| 一区在线视频观看| 精品在线网站观看| 亚洲欧美中文字幕| 91欧美日韩在线| 日韩精品视频中文字幕| 国产婷婷精品| 在线日韩精品视频| 久久久久久99精品| 色综合久久88色综合天天免费| 国产偷国产偷亚洲清高网站 | 在线观看一区日韩| 日韩视频在线一区二区三区| 在线日韩欧美| 在线精品视频免费播放| 欧美二区在线观看| 国产小视频在线观看| 一级片免费在线| 亚洲三级免费看| 国产欧美日韩中文| 中文字幕在线官网| 亚洲精品欧美二区三区中文字幕| 欧美亚洲国产日韩2020| 阿v免费在线观看| 成人福利一区| 精品视频在线视频| 国产95在线|亚洲| 中文字幕亚洲国产| 欧美日韩国产不卡在线看| 国产在线导航| 国内不卡的二区三区中文字幕| 日韩欧美亚洲日产国| 黄色欧美日韩| 欧美日韩在线观看一区| 日韩三级高清在线| 中文字幕日韩国产| 亚洲欧美中文在线视频| 欧美国产一级片| 欧美三级在线视频| 国产激情久久| 黄色资源在线观看| 日韩欧美999| 亚洲一区中文| 成人欧美亚洲| 欧美国产日韩综合| 欧美日韩综合在线| 精品欧美不卡一区二区在线观看| 亚洲综合视频一区|