如何在Shell脚本中判断仓库是否有outgoing变更并安全检测真实错误?
关于Mercurial
hg outgoing退出码的可靠性分析 我来帮你梳理下这个问题——其实你观察到的行为是Mercurial全局退出码规则的一部分,虽然hg outgoing的专属文档只明确提到了0和1,但这个行为是完全可以信任的。
退出码的具体含义
Mercurial的退出码遵循一套全局规范,对应hg outgoing的场景:
- 0:检测到有需要推送的outgoing变更集,命令执行成功且符合预期结果
- 1:命令执行成功,但未找到任何outgoing变更集(无需要推送的内容)
- 255:命令因致命错误终止,比如你遇到的网络中断、远程仓库不可达、权限不足等情况
文档依据
虽然hg outgoing的单独文档只提及了0和1,但Mercurial的通用退出码规则在全局帮助文档中有明确说明:
Mercurial uses three core exit code categories:
- 0: Success (command completed as intended)
- 1: Success but no desired outcome (e.g., no changes to commit, no outgoing changes)
- 255: Fatal error (command failed to complete due to an error)
你可以通过运行hg help查看全局帮助信息,或者在Mercurial官方手册的通用章节找到这部分内容。
脚本编写建议
在脚本里,你可以放心通过退出码区分三种场景,示例如下:
hg outgoing -q EXIT_CODE=$? if [ $EXIT_CODE -eq 0 ]; then echo "存在需要推送的变更集" elif [ $EXIT_CODE -eq 1 ]; then echo "无需要推送的变更集" else echo "命令执行出错,错误码:$EXIT_CODE" # 此处可添加错误处理逻辑,比如重试、告警等 fi
总结
完全可以依赖hg outgoing的这个退出码行为:0对应有变更,1对应无变更,非0/1的退出码(最常见的是255)则代表真实错误。这是Mercurial长期保持的稳定规范,不会轻易变动。
内容的提问来源于stack exchange,提问作者binki
相关产品推荐
相关产品推荐

