【问题标题】:How can I prevent submitting an empty Perforce changelist from being an error?如何防止提交空的 Perforce 更改列表成为错误?
【发布时间】:2011-02-17 17:58:12
【问题描述】:

尝试提交没有文件的更改列表被 Perforce 视为错误(p4 submit ... 返回退出代码 1)。这会导致我们的构建服务器上的定期集成构建失败(我们正在使用Zutubi's Pulse system); 在这种情况下,我希望构建成功,可能带有警告。

Pulse 具有退出代码重新映射功能,但 Perforce 似乎无法区分未能提交空更改列表和任何其他提交失败(例如验证触发器失败,我确实希望失败构建)。

想到的最明显(但在我看来并不优雅)的解决方案是将p4 submit 的执行包装在一个批处理文件中,该文件首先通过计算来自@ 的输出行来检查目标更改列表是否为空987654324@ -- 或者只是解析p4 submit 的输出以获取“无文件”消息并从批处理文件中成功返回。

有没有更好的技术来处理这个我没有看到的?

【问题讨论】:

  • 不,但我可能会解决问题(我对他们一无所知)。
  • 现在是 2015 年,使用 Perforce 之外的其他东西的另一个原因。

标签: build perforce build-server pulse


【解决方案1】:

在尝试提交更改列表之前,您可以先尝试将其删除。

p4 change -d ###

这个操作只有在changelist为空的情况下才会成功,所以不要提交(你刚刚删除了)。如果失败,则更改列表中有文件,请继续提交。

但是,如果您使用作业,这对您不起作用,因为您无法删除附加了作业的更改列表,即使它是空的。

【讨论】:

    【解决方案2】:

    如果我正确理解您的问题,仅使用 Perforce 可能没有好的技术。如您所见,问题在于 perforce 命令行运行的返回码是模棱两可的。提交一个空的变更列表真的是一个错误吗?也许,也许不是——可能取决于你问的是谁。

    查看“p4”命令的返回码并不是那么可取的。正如您所建议的,您最好的选择是解析命令的输出,然后从那里做您需要做的事情。

    现在大多数命令都支持 -ztag 选项(请参阅“p4 帮助用法”),这将可以使解析输出更容易一些,具体取决于您要执行的操作。如果是您的情况,只需在输出中查找文本然后决定从那里做什么就足够了。

    【讨论】:

      【解决方案3】:

      我最终还是用一个批处理文件解析了输出,使用类似这样的东西:

      for /f "delims=" %%I in ('p4 submit -d "<message>" 2^>^&1 1^>NUL') do    
      set SUBMIT_OUTPUT=%%I
      if "%SUBMIT_OUTPUT%"=="No files to submit from the default changelist." exit /b 0
      

      这是必要的,因为p4 的“无文件”消息实际上是正常写入标准错误的。如果输出是我认为“安全”的消息,我会以零退出代码退出,否则脚本将继续使用 p4 命令设置的任何错误级别。

      请注意,编号更改列表的“无文件”消息略有不同,如果您正在使用它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多