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



我知道这个问题在本质上已经被问过了,但这个问题没有明确的答案,所以请原谅我。

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

我的想法如下:创建一个Perforce触发器(在服务器端运行),它扫描提交的文档文件(如.txt),寻找唯一的术语(如#####PERFORCE##CHANGELIST##NUMBER###ROFL###LOL###WHATEVER#####),然后用提交时更改列表的值替换它。我已经知道如何确定这个值。我不明白的是,如何或在哪里更新文件。

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

"在变更列表创建和文件传输之后触发,但在提交到数据库之前",

是正确的方法。此时,文件需要存在于服务器上的某个位置。如何从(比如说)Python脚本中确定这些文件的(临时)位置,以便我可以更新或sed以将占位符值替换为预期值?到目前为止,我发现Perforce的在线文档并没有非常明确地说明这是否可能,或者在这个阶段提交的机制如何工作。

编辑

基本上我要找的是类似rcs的功能,但没有伴随它的难看的特殊字符序列。再深入挖掘一下,我问的和这个问题是一样的。然而,我相信这一定是可能的,因为触发器在服务器端上运行,并且文件已经传输到服务器。因此,它们必须能够被脚本访问。

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

[#####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.

  • 您是否试图替换在不同的客户端工作区(和不同的用户)上编辑的暂挂更改列表文件的内容?

  • 你想在文档文件中替换什么类型的信息?例如,它是一个日期,用户名与RCS关键字扩展?http://www.perforce.com/perforce/doc.current/manuals/p4guide/appendix.filetypes.html db5跑车- 18921

我想更好地澄清你想要完成的事情,以防有另一种方法可以做到你想要的。

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

此外,有一个现有的Perforce增强请求,我可以添加您的信息,关于客户端触发器,在提交之前修改客户端上的文件。

我还将您添加到现有的可定制RCS关键字的增强请求中,以及使用您提供的示例。

没有使用post-command触发器直接编辑存档内容,然后更新数据库中的校验和,目前没有一种方法可以使用自定义编辑的最终更改列表编号来更新文件内容。

我很早就在编程中学到的一件事是尽可能地保持在中断级别之外,特别是不要在中断中做那些需要资源的事情,这些资源可能会挂起系统。我完全理解您想要按顺序解决内部标签,但是更好的方法可能是在触发期间设置编辑,以便后触发工具可以执行文件修改。

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

最新更新