在提交之前使用Perforce触发器更新文件

时间:2014-06-10 20:23:48

标签: python triggers perforce rcs

据我所知,这个问题实质上已经been asked,但这个问题没有明确的答案,所以请耐心等待。

背景:在我的公司,我们使用Perforce提交号码作为版本控制的一部分。无论这是否是正确的方法,事情就是这样。目前,许多开发人员单独提交代码和文档的提交:首先是代码,然后是文档,用新版本号应该更新面向客户端的文档。我想简化这个过程。

我的想法如下:创建一个Perforce触发器(在服务器端运行),它会扫描提交的文档文件(例如.txt)以获取唯一的术语(例如#####PERFORCE##CHANGELIST##NUMBER###ROFL###LOL###WHATEVER#####)和然后将其替换为提交时更改列表的值。 我已经知道如何确定此值。我无法弄清楚的是,如何或在何处更新文件。

我已经确定使用change-content触发器(无论是否可能),

“更改列表创建和文件传输后的fire [s],但在将提交提交到数据库之前”,

是要走的路。此时,文件需要在服务器上存在 somewhere 。如何从Python脚本中确定这些文件的(临时?)位置,以便我可以更新或sed将占位符值替换为预期值?到目前为止,我发现的Perforce在线文档对于这是否可能或者现阶段提交的机制是如何工作的还不是很明确。

修改

基本上我正在寻找的是类似RCS的功能,但没有伴随它的难看的特殊字符序列。经过更多的挖掘,我所要求的与this question相同。但是我相信这一定是可能的,因为触发器正在服务器端运行并且文件已经已经传输到服务器。因此,必须可以通过脚本访问它们。

实施例

请考虑发行说明文档中的以下代码段:

[#####PERFORCE##CHANGELIST##NUMBER###ROFL###LOL###WHATEVER#####] Added a cool new feature.  Early retirement is in sight.
[52702] Fixed a really annoying bug.  Many lives saved.
[52686] Fixed an annoying bug.

这是用户提交的。然后,我希望触发器在提交过程中拦截此文件(如上所述,在change-content阶段)并对其进行更改,以便最终存储在Perforce中的内容如下所示:

[52738] Added a cool new feature.  Early retirement is in sight.
[52702] Fixed a really annoying bug.  Many lives saved.
[52686] Fixed an annoying bug.

52738 是用户提交内容的最终更改列表编号。 (如上所述,我已经可以确定这个数字了,所以请详细说明这一点。)即,用户在Perforce客户端控制台上看到的是。

Changelist 52733 renamed 52738.
Submitted change 52738.

3 个答案:

答案 0 :(得分:1)

我想更好地澄清你想要实现的目标,以防有另一种方法去做你想做的事情。

根据您的目的,您可能需要考虑搁置(http://www.perforce.com/perforce/doc.current/manuals/p4guide/chapter.files.html#d0e5537

此外,我可以添加您的信息,现有Perforce增强请求, 关于客户端触发器在提交之前修改客户端上的文件。如果实施,将通过电子邮件通知您。

答案 1 :(得分:0)

99瓦特,

我还将您添加到可自定义RCS关键字的现有增强请求中 用你提供的例子。

如果没有使用命令后触发器直接编辑存档内容,然后更新数据库中的校验和,目前无法使用自定义编辑的最终更改列表编号更新文件内容。

答案 2 :(得分:0)

我很早就在编程中学到的一件事就是要尽可能地避免进入中断级别,尤其是不要在需要资源的条件下使系统挂起。我完全明白,您想按顺序解决内部标签,但是更好的方法可能是在触发期间设置编辑,以便触发后工具可以执行文件修改。

如果我看错了,请更正我,但是如果您尝试在提交文件更改的过程中进行文件更改,则似乎有些讽刺或递归。最好为日志保留第二个更改列表。您总是知道该文件在本地文件空间中的位置。也就是说,ktext文件和$字段可能可以提供帮助。