可靠地检查工作集中是否有脏文件或未跟踪文件

时间:2017-11-23 22:16:33

标签: mercurial

我正在尝试编写一些脚本,用于在mercurial中执行一些简单的内务处理任务,我经常需要做的一件事就是检查工作集是否为“空”(取决于上下文,这可能意味着未跟踪的文件或修改过的跟踪文件。)

dplyr::case_when()命令以退出状态0退出,除非出现内部错误,在这种情况下退出时退出状态为255。

如果我的一些脚本,我正在做一些愚蠢的事情,比如捕获hg status命令的输出并检查它是否为空。

在其他情况下,我正在检查hg status的退出状态,以检查是否存在脏跟踪文件。

这两个看起来都有点脆弱。是否有用于“查询”存储库的专用子命令,以查看工作集中是否存在“未跟踪文件”或“脏跟踪文件”或“已删除文件”或其他各种有趣内容?

2 个答案:

答案 0 :(得分:1)

hg status 命令,用于检查工作目录相对于签出修订的修改 - 因此您做的是正确的。

您可以完全使用hg status。如果跟踪的文件没有更改,则使用--mard(或--modified --added --removed --deleted)标志将为空。使用-u--unknown将显示既未被忽略也未被跟踪的文件 - 空输出应始终指示对已跟踪文件或任何未被忽略的文件没有更改(但可能存在与之匹配的新文件)忽略模式)。

这些命令的输出格式(至少在英文原文中,因此LC_ALL=C hg status)被mercurial视为API,因此您应该能够依赖它。

根据您的实际使用情况,您可能需要查看mercurial command server - 但对于偶尔运行的脚本,它可能会超出顶部。

答案 1 :(得分:-1)

test -z "$(hg status -mard --template x)" && echo clean || echo dirty

似乎可以工作