[SCM]源码管理 - perforce的trigger和daemon
perforce提供了2中机制来让用户自定义或增强perforce的功能:trigger 和 daemon 。
一 triggers
triggers 是用户定义的script,但是在某些特定的条件下由p4server自动调用来执行一定的功能。如果script返回0,表示成功,p4server的其他功能继续执行;如果script返回非0值,表示script执行失败,script的output将被作为error message返回为客户端。
常见的trigger的作用:集成LDAP或AD用户认证方式,锁定branch,规范提交时的changelist的描述,跟新bug或task管理系统等。
1)trigger表
p4server使用trigger表来管理所有的trigger,可以使用命令p4 trigger查看所有的trigger,例如:
Triggers:
relnotecheck change-submit //depot/bld/... "/usr/bin/rcheck.pl %user%"
verify_jobs change-submit //depot/... "/usr/bin/job.py %change%"
trigger表有多行组成,每一行表示一个trigger的信息。每一个trigger都包含多列,分别表示:
name : trigger的名字,一般直观地我们在trigger的名字中包含作用信息;
type : trigger的类型,可以分为以下6个类型,changelist submission triggers, shelve triggers, fix triggers, form triggers, authentication triggers, and archive triggers.
path : trigger所作用于的branch的路径,对于changlist和shelve trigger需要此参数;
command : 当trigger满足条件时需要执行的命令,命令需要“”括起来,且在command中可以使用p4自定义的一些变量,例如;%change% == %changelist%, %serverport%, %user%等。
2)trigger的type
changelist submission triggers:
*change-submit :在changelist创建后但是文件传输前执行trigger;
*change-content :在changlist创建后文件传输完成但是changelist没有提交的时候执行trigger;
*change-commit :在changlist创建后,文件传输完成且changlist提交后执行trigger;
Shelve triggers:
*shelve-submit :相当于pre-shelve trigger,在changelist创建后和文件locked后但是文件传输前执行trigger;
*shelve-commit : 相当于post-shelve trigger,在文件被shelved后执行trigger;
*shelve-delete :在放弃sheleved的文件前执行trigger;
Fix triggers:
*fix-add :在增加一个fix前执行trigger;
*fix-delete :在删除一个fix前执行trigger;
Form triggers:
*form-save :在form的内容被解析但是没有存储到p4server db时候执行trigger;
*form-out :在form产生后执行trigger,可以修改form;
*form-in :在form修改的时候内容被解析和验证前执行trigger,可以修改form;
*form-delete :在form删除前内容被解析后执行trigger,可以修改form;
*form-commit :在form提交后执行trigger,不能修改form;
Authentication triggers:
*auth-check : 执行认证检查trigger,基于外部的密码管理系统验证用户的密码,当此trigger设置后,新用户的密码设置相关的p4 security counter被忽略。
*auth-set : 此trigger用来将新的密码发送到外部的密码管理系统。
3)可以在command中使用的自定义的变量
%action% : 空或字符串用来反映对changelist或job操作,例如“submitted change 124 deleted”;
%changelist% %change% :表示changelist,change-submit trigger传入的是pending的changelist,change-commit trigger传出的是提交后的changelist;
%changeroot% : 表示提交文件的root路径;
%client% : 用户的client名字;
%clienthost% : 用户的client设置的host信息;
%clientip% : client的ip地址;
%jobs% : job numbers;
%oldchangelist% :如果changelist在提交后改变了,%oldchangelist%表示提交前旧的changelist;
%serverhost% : 表示p4server的名字;
%serverip% : 表示p4server的ip地址;
%serverport% :表示p4server的port;
%serverroot% : 表示p4server的root目录;
%user% :表示当前操作的user;
%formfile% : 表示form 相关的操作中的临时的form spec文件;
%formname% : form的名字,例如changelist或branch名字;
%formtype% : form的类型,例如branch,change等;
%op% : archive操作中表示read,write,或delete;
%file% : archive操作中文件的路径;
%rev% : archive操作中文件的版本;
4) trigger的执行顺序
如果有多个triggers时,执行顺序为
form-out -> form-in -> form-save -> form-delete
daemon是用户定义的script,且由用户设置在某些指定的时间执行的。一般用来检测p4server的修改,然后执行一些操作。 例如某个p4 review daemon script每个几分钟检测p4server上的最新的修改,然后发信给对此代码修改感兴趣的人员。
1)常见的daemon有:
p4 job daemon,用来每天产生open的job的报告,然后发送给感兴趣的人员。
p4 web daemon,用来自动地sync p4server上某些depot的最新的修改到某个目录,该目录被设置为web共享的,可以被用户通过web浏览器查看。
*名字为review的p4 counter记录了上次review的截止chagnelist;
*使用p4 review -t review来获得从上次review到现在为止所有的新的changelist信息;
*对每一个changelist,使用p4 review -c changelist#来获得对此changelist所包含的文件的订阅用户;
*然后发email给所有的这些用户,email的内容将为p4 describe changelist#;
*最后使用命令p4 changes -m 1 -s submitted获得最新的chagnelist, 将最新的changelist设置为rereview counter的值p4 counter review [latestchangelist#];
完!