1

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

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

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

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

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

是要走的路。此时文件需要存在于服务器上的某个位置。如何从 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.
4

3 回答 3

1

我想更好地说明您要完成的工作,以防有另一种方法可以做您想做的事情。

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

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

于 2014-06-10T23:51:45.450 回答
0

99w,

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

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

于 2014-06-18T17:23:14.020 回答
0

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

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

于 2018-07-26T20:19:15.000 回答