现在的位置: 首页 > 综合 > 正文

ClearCase Trigger指南 (1) 前言与简介

2013年09月09日 ⁄ 综合 ⁄ 共 3229字 ⁄ 字号 评论关闭

本文写作于2005年中,近期正在做修改,本想向IBM Developworks投稿,为即将出世的Baby赚点奶粉钱,结果没反应,估计是写的不好,IBM没兴趣,既然如此,决定发在自己的Blog中,如若转载,请标明转载,原作者与出处,不要象我以前的一些文章,有人直接当做自己写的发表去赚稿费了。

  1. 前言

我在深入了解ClearCase的过程中,发现Trigger是一个很有用的助手,但是我在学习的过程中也走过弯路,常常觉得如果有一个简要的文档给以指导会避免许多无谓的烦恼,所以完成本文,希望能够给ClearCase的初学者以帮助。

提醒:本文中所有的Trigger只是示例,不能直接应用到实际的配置管理系统中,如果直接应用可能产生不明后果;同时本文的所有示例都是基于ClearCase 2003.06.15 for Windows,其他版本与平台的ClearCase可能会有所不同。

本文草稿完成于20063月底,在草稿中提到了我对Deliver过程的被步了解,在之后的修改过程中,IBM2006623发布了IBM Rational Software Development Platform – Team Version 7.0,新的ClearCase随机文档IBM Rational ClearCase Guide to Developing Software with UCM, 7.0中对Deliver过程进行了描述,基于新的文档本文进行了修订。

       2.ClearCase Trigger简介

在学习ClearCase的过程中,Rational ClearCase CCIUG讨论组给了我很大的帮助,刚接触ClearCase时,我提出了许多流程控制的问题,在ClearCase讨论组中许多人回答到这些问题用Trigger解决比较合适;由此带来了新的问题:Trigger是什么?在其他的软件中也有Trigger这个概念,例如:Oracle数据库;在ClearCaseTrigger与其他软件中的Trigger有什么不同吗,它能够起到什么作用呢?

顾名思义,Trigger就是触发器,符合条件时会触发一系列动作,在这里我们可以看一下Rational给出的标准解释(IBM Rational ClearCase Book cc_intro.pdf Page 63):A monitor that specifies one or more standard programs or built-in actions to be executed whenever a certain ClearCase operation is performed.翻译过来大意为:监控某一指定的ClearCase操作时,当符合条件时,会触发一系列的动作,执行的这些动作可以是ClearCase内置命令或可执行的标准程序。

Trigger的定义中,我们可以了解到,在ClearCase中,触发Trigger的条件是执行ClearCase的一些操作;在这里有一点要注意,虽然这些会触发TriggerClearCase操作的名称与ClearCase的一些命令或Cleartool的子命令相同,但是触发TriggerClearCase操作不等同于ClearCase的命令与Cleartool的子命令,所以初学者常会混淆这两者的区别;可以这么理解,ClearCase的操作相应于ClearCase底层的过程与函数,ClearCase的命令与Cleartool的子命令在其上做了一些交互操作等封装,例如checkout操作,cleartool checkout命令一定会引起这个操作,但是clearimport命令与cleartool findmergecleartool mkelemcleartool mkbranchcleartool relocate这些命令都可能会引起这个操作,所以如果建立了一个checkoutTrigger,有时我们没有执行Checkout命令时也会被触发。

Trigger触发的时机有两种:事前触发与事后触发;事前触发主要是验证一些条件或进行一些准备工作(参见图表1事前触发(Pre-Operation)Trigger),事后触发则是进行收尾工作(参见图表 2 事后触发(Post-Operation)Trigger
    (抱歉,图表是用Visio做的,无法显示)

从以上两个图可以看出,事前触发与事后触发最大的不同是定义了事后触发TriggerClearCase一定会被执行,在执行后再执行Trigger,而事前触发的Trigger则会根据Trigger的执行结果判断是否执行ClearCase操作。

根据Trigger定义还不能直接看出Trigger的作用,我们可以从一个具体的Trigger来看一下。在ClearCase中,如果一个用户是某个配置项的Owner,该配置项的所有的分支都是该用户所创建的,并且该配置项的任何一个版本没有关联ClearCase元数据,在这种情况下该用户可以执行cleartool rmelem命令彻底删除这个配置项;但是在实际工作中,一般用户执行这个操作可能会导致配置项丢失,一般要确保只有指定的用户才具有删除权限,我们就可以通过Trigger来禁止一般用户执行删除配置项的操作。

例如,我们只允许cuibz这个用户执行删除配置项的操作,首先我们要用cleartool mktrtype命令创建一个TriggerType

Cleartool mktrtype -c "Only Cuibz can execute rmelem" -element -preop rmelem -nusers cuibz -execunix "Perl -e /"exit -1;/"" -execwin "ccperl -e /"exit (-1);/"" rmelem_check

在定义Trigger时,用了-preop,这表明这个Trigger是一个事前触发的Trigger,在执行rmelem操作前首先要执行这个Trigger,如果配置项已经被删除再检查权限就没有任何意义了;另一个参数-nusers cuibz保证了针对cuibz这个用户不会执行Trigger,而之后-execunix "Perl -e /"exit -1;/"" -execwin "ccperl -e /"exit (-1);/"的具体含义是给出trigger结果,拒绝执行之后的ClearCase操作。这个Trigger的目的是除了cuibz这个用户外,其他所有执行rmelem操作的用户都会被拒绝。

只建立了rmelem_check这个Trigger Type,而没有把这个Type关联到配置项,则Trigger并不会起任何做用;如果需要针对Test这个目录配置项及其下的所有配置项进行保护,我们需要执行以下命令:

cleartool mktrigger -nc -r rmelem_check Test

这样在Test这个目录配置项及其下的子目录下,如果要执行rmelem操作都会要先检查一下操作员是否是cuibz,如果是不执行Trigger,执行rmelem操作,删除配置项;如果不是,则执行Trigger,结果是拒绝执行rmelem操作,并给出提示:

cleartool: Warning: Trigger "rmelem_check" has refused to let rmelem proceed.

cleartool: Error: Unable to remove element "New Folder".

TriggerClearCase的元数据对象,ClearCase中除了Element外,UCM对象可以可以关联Trigger,而针对元数据的操作可以设置Trigger。具体有哪些操作可以定义Trigger可以参考IBM Rational ClearCase文档:Rational ClearCase Command Referencemktrtype的描述。

抱歉!评论已关闭.