可靠地检查工作集中是否有脏文件或未跟踪文件
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
似乎有效
我正在尝试编写一些脚本来在 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
似乎有效