1

我花了几个小时在互联网上寻找解决方案,以弄清楚当开发人员未提供评论时如何禁止签入操作。

我正在尝试编写一个 preop 签入触发器,该触发器在每次签入检查评论字段是否为空之前触发。

到目前为止,我只管理向用户显示消息,但我找不到中断签入操作的方法。

在此先感谢,任何帮助将不胜感激。

编辑:安装触发器的命令如下:

mktrtype -element -all -preop checkin -exec <trigger_path> COMMENT_CONTROL

4

2 回答 2

1

首先,不要试图把所有东西都塞进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;
于 2012-12-12T15:51:28.343 回答
1

根据您使用的语言,返回非零返回码(即1)应该可以解决问题。我已经多次多次编写 Perl 的这一行来使 ClearCase 触发器不允许操作继续进行。

exit 1;

每次都工作。

于 2012-12-12T15:33:37.890 回答