我花了几个小时在互联网上寻找解决方案,以弄清楚当开发人员未提供评论时如何禁止签入操作。
我正在尝试编写一个 preop 签入触发器,该触发器在每次签入检查评论字段是否为空之前触发。
到目前为止,我只管理向用户显示消息,但我找不到中断签入操作的方法。
在此先感谢,任何帮助将不胜感激。
编辑:安装触发器的命令如下:
mktrtype -element -all -preop checkin -exec <trigger_path> COMMENT_CONTROL
首先,不要试图把所有东西都塞进mktrtype
命令中:你的触发器定义应该调用一个脚本(所有用户都可以访问),你可以在其中编写你想要的所有检查。
您可以在此preop checkin 触发器中看到一个脚本示例,如果不满足某些条件,该脚本必须显示一条停止消息。
它基于一个误差函数:
########################################################################
# SUBROUTINE ERROR
#
sub error {
close(WORKFILE);
unlink($workFile);
my ($message) = @_;
die ($message."\nUnable to continue checkin ...\n");
}
在脚本中的任何位置,您都可以调用:
&error("$message");
这将在向用户显示错误消息时停止签入。
它是脚本的一部分,您可以使用以下命令将其声明为触发器:
cleartool mktrtype -c "RCS Keyword substitution in a source file" -element -all -preop checkin -eltype text_file -execwin "ccperl \\mw-ddiebolt\triggers\keyword_subst.perl" -execunix "Perl /net/titeuf/triggers/keyword_subst.perl" KEYWORD_SUBST
如果这太复杂了,这个其他脚本会像这样使用exit
:
sub checkUserName {
my $user = shift(@_);
my $currentUser = uc($ENV{CLEARCASE_USER});
if ($user !~ m/^($currentUser)/) {
`clearprompt proceed -mask proceed -type error -prompt \"Can't create label f
exit 1;
}
exit 0;
}
这应该与您的相同:
system("clearprompt proceed -mask proceed -type error -prompt \"$text\"");
exit 1;
根据您使用的语言,返回非零返回码(即1
)应该可以解决问题。我已经多次多次编写 Perl 的这一行来使 ClearCase 触发器不允许操作继续进行。
exit 1;
每次都工作。