请大家提出意见,我对这部分也不是很满意,但是没有修改的头绪,请给出意见。
Trigger的类型
哪些操作可以应用Trigger
在第一节我们谈到了Trigger的类型区分,在这节我们主要根据Trigger所针对的ClearCase操作对象来看一下,Trigger可以应用在ClearCase哪些操作。
这里我们从如何创建一个Trigger谈起。Trigger是一个Type,我们要应用Trigger首先要创建一个Trigger Type,和其他element type、branch type等不同的是我们只能应用cleartool mktrtype来创建trigger type,而不能应用GUI去创建。
在应用cleartool mktrtype创建trigger type时,我们可以应用-element、-type与-ucmobject来创建三种不同类型的trigger type。需要注意的是有些操作即可以应用于element,也可以应用于type,如lock,如果想要在每种ClearCase对象上都要进行流程的定义与检查,就要分别创建element与type对象的trigger。
首先是作用于Element对象的trigger,这类trigger就象label type或attribute type等一样,要被关联到具体的element上,这时要应用cleartool mktrigger命令,但是在创建时如果应用了-all选项,这个trigger就会关联到VOB,而不需要再用mktrigger去关联。一般来说象前文所述的保护配置项不会被未经批准的人删除这样的作用于整个VOB的Trigger要应用-all这个选项,这个trigger就可以这样建立:
Cleartool mktrtype -c "Only Cuibz could execute rmelem" -element -all -preop rmelem -nusers cuibz -execunix "Perl -e /"exit -1;/"" -execwin "ccperl -e /"exit (-1);/"" rmelem_check
不只是引起Element版本的变化的ClearCase操作可以定义Trigger,会引起Element的attribute type和状态变化等ClearCase操作也可以定义相应的Trigger,如修改注释、对锁定配置项或对配置项解除锁定与改变配置项的权限等,甚至关联与取消关联Trigger之类的ClearCase操作也可以定义要触发的Trigger。相应的ClearCase操作可以参见ClearCase参考手册。
在创建trigger type时,-type这个选项可以创建针对type对象ClearCase操作的Trigger,一般情况下要指定针对哪一种type对象触发Trigger,而对mktype这个ClearCase操作所定义的Trigger会针对所有的type。我们可以将第一节的例子修改一下,在创建所有的type对象之前检查权限,只允许某几个人进行操作如ccadmin,例子如下:
Cleartool mktrtype -c "Only ccadmin could execute mktype" -type -preop mktype -nusers ccadmin -execunix "Perl -e /"exit -1;/"" -execwin "ccperl -e /"exit (-1);/"" -attype -all -eltype -all -brtype -all -hltype -all –lbtype –all –trtype -all mktype_check
其实这种限制过于严格,在实际应用中一般建议只限制针对Trigger type,可以根据实际情况决定是否限制其他用户创建Branch type,可以根据修改为禁止ccadmin外所有用户创建type,我们可以用-replace这个选项修改已经创建好的Trigger,如下:
Cleartool mktrtype -c "Only ccadmin could execute mktype" -type –replace -preop mktype -nusers ccadmin -execunix "Perl -e /"exit -1;/"" -execwin "ccperl -e /"exit (-1);/"" -trtype -all mktype_check
针对type对象的ClearCase操作的Trigger与Element对象和UCM对象的Trigger相比有一点不同,这类Trigger不用再执行Cleartool mktrigger执行关联操作。
针对Element与type对象的ClearCase操作的trigger都是作用于一般的VOB,-ucmobject选项创建的Trigger是针对PVOB的,可以针对UCM中的流程进行一定的补充,如规定只有项目组的SCM才可以创建Stream,可以创建这样一个Trigger:
cleartool mktrtype -c "Only cuibz could create stream" -ucmobject -preop mkstream -nusers cuibz -execwin "ccperl -e/"exit(-1);/"" mkstream_check
之后我们可以应用cleartool mktrigger将这个Trigger关联到某个Project上,但是建议这样的Trigger最好与保护配置项的Trigger一样关联到整个PVOB,在mktrigger时,要指明UCM 对象的类型,如下所示:
cleartool mktrigger mkstream_check project:FrameIncrement
想要在 FrameIncrement 这个 Project 上关联 Trigger ,则要标明 project:FrameIncrement 。