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

Pulse 具有退出代码重新映射功能,但 Perforce 似乎无法消除提交空变更列表失败和任何其他提交失败(例如验证触发器失败,我认为这是一个错误)之间的歧义。 想让构建失败)。

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

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

有帮助吗?

解决方案

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

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

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

其他提示

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

p4 change -d ###

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

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

我最终确实使用如下内容解析了批处理文件中的输出:

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 命令。

请注意,“无文件”消息 编号的 如果您使用的是changelist,则略有不同。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top