在CVS使用提交信息pre-commit钩子
-
13-09-2019 - |
题
时有可能使用在一个CVS pre-commit钩子提交信息? CVS服务器远程运行,并且我使用pserver
访问它。
理想情况下,我想允许提交如果文件通过过滤器或强>提交消息中包含的某些文本。
我没有选择使用另一个版本系统。
解决方案
下面是一些有用的教程以读取更多:
HTTP:/ /durak.org/sean/pubs/software/cvsbook/The-commitinfo-And-loginfo-And-rcsinfo-Files.html 结果 http://durak.org/sean/pubs/software/cvsbook/The-verifymsg-And-rcsinfo-Files.html#The-verifymsg-And-rcsinfo-Files
<击>你不能做你想只用一个钩子什么,但你可以用两个钩子,击> commitinfo
会让你确认自己的文件和verifymsg
会让你验证消息。既可以用来取消提交(程序只需要与状态1退出)。如果你还没有意识到,checkoutlist
,commitinfo
和“完verifymsg”都可以在你的仓库的CVSROOT目录中找到。我建议把你写在该目录钩以及任何脚本,但是当你指定的完整路径其实并不重要。此外,perl的是没有必要的或需要的,只是简单的用于我写一些(傻)例子:
checkoutlist文件
# these files will be automatically checked out for you
acceptable
verifymsg的
# specifies which file to run as hook, %l is filename of log message
# bar$ /path/to/repo/CVSROOT/verify_ends_in_bar %l
DEFAULT /path/to/repo/CVSROOT/acceptable %l %s
上可接受的
#/usr/bin/perl -w
use strict;
use warnings;
# this would be simpler if cvs passed sane arguments
my ($logfile, $dir, @files) = @ARGV;
my $grep = `grep -i 'accept liability' $logfile`;
exit 0 if $grep;
my $found = 0;
foreach my $file (@files) {
my $path = join '/', $dir, $file;
die "Can't find file $path" if ! -e $path;
my $grep = `grep -i 'evidence of any deliberation' $path`;
$found++ if $grep;
}
die "You must accept liability or show evidence of deliberation" if $found < @files;
买者自负:我写这个最把我的头顶部,没有测试,所以我不能保证它的工作原理,但它应该让你至少接近
。 再次编辑后,我才意识到,我本来是错了,你可以同时通过日志文件和承诺的文件名verifymsg
使答案相当简单一点。
其他提示
在 CVS ::触发 Perl模块,似乎有一个的实验强>功能,允许对于不同的触发器的呼叫之间的高速缓存值。页面明确提到从commitinfo到verifymsg的传递文件名,所以也许它可以帮助你达到你想要的东西。
您可以在verifymsg
目录使用CVSROOT
文件。你可以配置它来调用一个脚本,可以验证签入注释的内容。你可以拒绝通过返回非零的提交。
默认verifymsg的文件包含更多细节。
我一直在处理同样的问题。到目前为止,我最好的解决方案已经得到父进程ID(getppid()),并用它伊娜临时文件,我可以把文件的列表到从commitinfo。此父ID似乎是用于verifymsg的处理(在AIX至少)是相同的。 好运。