时有可能使用在一个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退出)。如果你还没有意识到,checkoutlistcommitinfo和“完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至少)是相同的。 好运。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top