声明:本文欢迎非商业用途转载,如果象某些网站对用户收费则谢绝转载,如若转载,请标明转载,原作者与出处,不要象我以前的一些文章,有人直接当做自己写的发表去赚稿费了。
Trigger可以做什么?
所有的刚接触ClearCase的用户一般都认为Trigger是执行一个程序,实际并不是如此,这里我们给出一个例子,Trigger也可以执行一些ClearCase操作,如mklabel,mkattr等:
cleartool mktrtype -element -postop checkin –mklabel Release$Rel_num / -c "Check in Make Label" Checkin_mklabel
这个Trigger的作用是当Checkin操作之后,Element有新的版本产生时,打上label。需要注意,在环境变更中要有Rel_num的值,如果Rel_num为11,则在VOB中已定义了Label type:Release11,否则不会打上label。
Cleartool mktrtype的参数中有一组是定义Trigger的动作的:
1. –exec command 执行指定的命令,如果命令是带参数的,则要将整个命令用单引号括起来,在这里定义的命令在所有的操作系统平台都有效,为了避免出现由于操作系统不兼容而造成Trigger失败,建议应用-exec command定义的命令中只使用ClearCase提供的命令与cleartool的子命令,不要使用UNIX的命令或Windows的命令,如ls,dir等;如果想要自己写一些应用脚本,则要保证在Windows与UNIX平台都可以执行。
2. –execunix command 这里定义的命令只能在UNIX系统下有效,除了ClearCase的命令与子命令外,建议使用Shell脚本或Perl脚本。
3. –execwin command 应用execwin 定义的操作只在Windows系统下有效,除了ClearCase的命令与子命令外,建议使用Perl脚本或VB脚本;在这里有一点要特别提醒注意的,如果在命令或脚本中应用了Windows的内置命令如dir,cd等,则要应用cmd /c,如下所示:
Cleartool mktrtype –element –postop checkin –execwin “cmd /c copy %CLEARCASE_PN% //Bakckup/.” -nc
4. –mklabel label 给当前的element或type等打上label,但是要求label必须已经定义了,所以建议在之前可以预定义一些label。
5. –mkattr attribute 给当前的element或stream或component关联相应的attribute并赋值。
6. mkhlink hlink 在引起Trigger操作相对应的element上执行mkhlink操作,可以应用to或from选项选择link的方向。
在第二节中讨论Trigger的优缺点时提到了针对同一个element、ucmobject或type操作可以定义多个trigger,一般情况下你可以看一下这个element的属性,在Windows环境下Trigger会按在属性中的顺序执行,但是在ClearCase文档提到不能保证执行顺序,所以尽量避免在一个element的同一操作的同一类型上关联多个Trigger。一般建议如果需要处理则将所有的Trigger并到一个Trigger中。
在以上的六项操作是非互斥的,但是需要注意mklabel、mkattr与mkhlink只支持事前触发类型的Trigger,即只有-postop的Trigger可以执行这几项操作。
最后有一个小技巧,当只定义了-execunix或-execwin时,如果当前的操作系统不是UNIX或Windows则默认为Trigger 失败,所以可以通过对checkin及checkout等操作设定只执行UNIX或Windows命令的Trigger来限制开发人员的开发平台,这样可以防止开发人员在不同开发平台的编译错误问题。
在创建完Trigger type后,一般需要执行cleartool mktrigger来进行关联。