Build 如何防止提交空的Performce变更列表成为错误?

Build 如何防止提交空的Performce变更列表成为错误?,build,perforce,build-server,pulse,Build,Perforce,Build Server,Pulse,Perforce认为尝试提交没有文件的变更列表是错误的(p4 submit…返回退出代码1)。这会导致构建服务器(我们正在使用)上的定期集成构建失败在这种情况下,我希望构建成功,可能需要警告 Pulse具有退出代码重新映射功能,但Perforce似乎无法消除提交空变更列表失败和任何其他提交失败之间的歧义(例如验证触发器失败,我确实希望生成失败) 我想到的最明显的(但在我看来,这是不雅的)解决方案是将执行p4 submit的过程包装在一个批处理文件中,该批处理文件首先检查目标变更列表是否为空,方法

Perforce认为尝试提交没有文件的变更列表是错误的(
p4 submit…
返回退出代码1)。这会导致构建服务器(我们正在使用)上的定期集成构建失败在这种情况下,我希望构建成功,可能需要警告

Pulse具有退出代码重新映射功能,但Perforce似乎无法消除提交空变更列表失败和任何其他提交失败之间的歧义(例如验证触发器失败,我确实希望生成失败)

我想到的最明显的(但在我看来,这是不雅的)解决方案是将执行
p4 submit
的过程包装在一个批处理文件中,该批处理文件首先检查目标变更列表是否为空,方法是计算从
p4 opened
中输出的行数,或者只是解析
p4 submit
的输出以确定“无文件”消息,并从批处理文件中成功返回


有没有更好的技术来处理这件事,我没有看到

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

p4更改-d###

只有当变更列表为空时,此操作才会成功,因此不要提交它(您刚刚删除了它)。如果失败,变更列表中有文件,请继续提交


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

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

查看“p4”命令的返回代码并不是很明智。正如您所建议的,最好的办法是解析命令的输出,然后从那里执行您需要执行的操作


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

我最终在批处理文件中解析了输出,使用了如下方法:

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
for/f“delims=“%%I in('p4 submit-d“2^>^&1 1^>num”)do
设置提交输出=%%I
如果“%SUBMIT\u OUTPUT%”==“默认变更列表中没有要提交的文件。”退出/b 0
这是必要的,因为
p4
的“无文件”消息实际上正在正常写入stderr。如果输出是我认为“安全”的消息,则用一个零退出代码退出,否则脚本将继续使用由<代码> P4< /Code >命令设置的任何错误级别。
请注意,如果您正在使用编号变更列表,则其“无文件”消息会略有不同。

否,但如果它能解决问题,我可能会这样做(我对它们一无所知)。2015年是使用Performance之外的另一个原因。