首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 软件时空 > 软件相关 > ClearCase Trigger指南 (1) 前言与简介
【标  题】:ClearCase Trigger指南 (1) 前言与简介
【关键字】:ClearCase,Trigger
【来  源】:http://blog.csdn.net/battle_cry/archive/2006/07/19/940621.aspx

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

本文写作于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的描述。

软件项目计划如何编写举例:【上一篇】
微软开发模式和原则:【下一篇】
【相关文章】
  • ClearCase Trigger指南(2) Trigger不是万能的,要以合适的方式用在合适的地方
  • ClearCase Trigger指南(3)-Trigger的类型
  • ClearCase Trigger指南(4)-Trigger可以做什么
  • ClearCase迁移中的一些经验
  • ClearCase的Web客户端使用指南
  • trigger & procedure
  • [Flash教程]ClearCase教程--开发人员加入ClearCase项目
  • clearcase在Windows下建分支步骤
  • ClearCase VOB 的结构和相关问题的诊断与修复
  • ClearCase VOBs
  • 【随机文章】
  • 本人再次推出<一周内学会linux网络服务>PPT文档 (可下载)
  • RIAWork介绍之二:静态以及动态性质的分离处理
  • 利用VB实现对IE的调用与控制
  • 使用Ports Collection ;CVSup 站点
  • Draw2D教程(六)
  • 在标准c++中当使用strcpy(),strcat()等函数时为什么可以不要#include?
  • ISA设置缓存内容定时下载(1)
  • 挽救可怜的硬盘:逻辑坏道修复记
  • C++类与对象
  • awk学习笔记
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.