class="22224">
--------------------------------------------------------------------------------
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;againn"
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;