我正在清理一个客户的跟踪系统,该系统使用 Mercurial(版本 2.0.2)来捕获状态并每小时自动提交所有更改。我将它从 cron 迁移到 Rundeck,因此如果/当事情失败时,他们将获得状态,这立即导致作业开始填充 Rundeck 的失败作业,因为“没有任何改变”错误。我立即去谷歌,我很惊讶这个问题被提出,但我没有找到答案。*

看起来三个应该是一个基本的、干净的 sh 或 bash 选项(但它们的命令行环境在必要时支持 Python 和 pip 模块)。

我对此类事情的首选回应是:

  • 在发出可能会失败的命令之前发出“正确”命令,如果一切正常,则命令失败实际上表明错误
  • 阅读文档并使用错误代码来区分发生了什么,适本地实现响应**
  • 执行 #1 或 #2 的一些变体,在那里我发出命令并 grep 输出***

  • * 我承认我很难搜索 hg Material ,部分原因是信息丰富,与 git 相似,以及我用 git 术语思考的坏习惯。话虽如此,我看到了这个问题,包括“[issue2341] hg commit returns error when nothing changed”。我没有找到对此的任何回复,也没有找到有关 StackOverflow 的相关讨论。

    ** 我在 https://www.selenic.com/mercurial/hg.1.html 看到 hg commit “成功返回 0,如果没有改变则返回 1。”不幸的是,我知道还有其他方法会使提交失败。刚才,我创建了一个虚拟的 Mercurial (mq) 补丁并尝试提交,得到“abort: cannot commit over an applied mq patch”。在那个例子中,返回码是 255。

    *** 我想我可以发出初始提交并捕获错误代码、stdout 和 stderr;如果 return 为 1 和 error 则处理文本,或者根据需要继续。

    最佳答案

    如果您想要一个仅在某些内容发生变化时提交的命令,请编写一个检查某些内容是否发生变化的命令。您可以通过将其编写为一个简单的 bash 条件来更“优雅”地做到这一点:

    if [ -n "$(hg status -q)" ]
    then
        hg commit -m "Automatic commit $(date)"
    fi
    

    关于bash - 对于脚本化提交,应该如何处理 Mercurial 的 "nothing changed"错误 ($? = 1)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36115850/

    10-13 09:10
    查看更多