如何防止提交空的Perforce更改列表成为错误?

时间:2011-02-17 17:58:13

标签: build perforce build-server pulse

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

Pulse具有退出代码重映射功能,但Perforce似乎没有消除提交空更改列表失败与任何其他提交失败之间的歧义(这样的验证触发失败,我 想要失败构建)。

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

有没有更好的处理方法,我没有看到?

3 个答案:

答案 0 :(得分:5)

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

p4 change -d ###

此操作仅在更改列表为空时才会成功,因此请勿提交(您刚刚删除它)。如果失败,则变更列表中有文件,因此请继续提交。

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

答案 1 :(得分:3)

如果我正确理解你的问题,那么Perforce可能没有好的技术。正如您所看到的,问题在于perforce命令行运行的返回代码是不明确的。提交一个空的变更列表真的是一个错误吗?也许,也许不是 - 可能取决于你问的是谁。

从'p4'命令查看返回码并不可取。你建议的最好的选择是解析命令的输出,然后从那里做你需要的。

现在大多数命令都支持-ztag选项(请参阅'p4 help usage'),可以使输出解析更容易,具体取决于你想要做什么。如果你的情况,它可能足以只查找输出中的文本,然后决定从那里做什么。

答案 2 :(得分: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&#34;没有文件&#34;消息实际上正在写入stderr。如果输出是我认为&#34;安全&#34;我以零退出代码退出,否则脚本将继续使用p4命令设置的任何错误级别。

请注意&#34;没有文件&#34; 编号更改列表的消息略有不同,如果您正在使用它。