6

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

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

想到的最明显(但在我看来,不优雅)的解决方案是p4 submitp4 openedp4 submit“无文件”消息并从批处理文件成功返回。

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

4

3 回答 3

5

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

p4 change -d ###

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

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

于 2011-02-17T20:02:17.377 回答
2

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

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

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

于 2011-02-18T13:55:00.483 回答
0

我最终确实使用这样的方法解析了批处理文件中的输出:

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' 的“无文件”消息实际上是正常写入 stderr 的。如果输出是我认为“安全”的消息,我会以零退出代码退出,否则脚本将继续执行p4命令设置的任何错误级别。

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

于 2014-11-07T16:42:04.360 回答