【问题标题】:Updating files with a Perforce trigger before submit在提交之前使用 Perforce 触发器更新文件
【发布时间】:2014-07-31 19:04:07
【问题描述】:

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

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

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

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

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

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

编辑

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

示例

考虑发行说明文档中的以下 sn-p:

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

【问题讨论】:

  • 这是Stack Overflow的问题。
  • @SvW 我可以在那里重新发布问题,但这是关于 Perforce 服务器 和在其上发生的脚本...
  • @SvW 感谢您的有用建议!

标签: python triggers perforce rcs


【解决方案1】:

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

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

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

【讨论】:

  • 嗨@P4Shimada,感谢您的回复。我更新了我的问题,并提供了我正在寻找的示例。
  • 我很高兴被添加到增强请求中,谢谢。
  • 嗨@phantom-99w,不客气。感谢您提供更新的示例。另外,我已将您添加到客户端触发器修改文件的增强请求中。
【解决方案2】:

99w,

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

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-08
      • 1970-01-01
      • 1970-01-01
      • 2022-12-05
      • 1970-01-01
      相关资源
      最近更新 更多