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

Reliably check if there are dirty or untracked files in working set

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

hg status 命令以退出状态 0 退出,除非出现内部错误,在这种情况下它以退出状态 255 退出。

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

在其他情况下,我正在检查 hg id -i | grep -qvF + 的退出状态以检查是否有脏跟踪文件。

这两个看起来都有点脆弱。 "querying" 存储库是否有专门的子命令来查看工作集中是否有 "untracked files" 或 "dirty tracked files" 或 "removed files" 或其他各种有趣的东西?

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

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

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

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

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

似乎有效