如果mercurial工作树中存在未提交的更改,则检查脚本的最佳方法是什么。
(我在git中使用git diff --quiet
的方式)
答案 0 :(得分:11)
在mercurial 1.4及更高版本中,您可以使用summary命令,当存在更改时,它会提供如下输出:
$ hg summary
parent: 0:ad218537bdef tip
commited
branch: default
commit: 1 modified
update: (current)
以及此次提交后:
$ hg summary
parent: 1:ef93d692f646 tip
sfsdf
branch: default
commit: (clean)
update: (current)
或者,您可以安装prompt extension并执行以下操作:
$ hg prompt '{status}'
将根据需要输出!
或?
或任何内容。
当然,这两者都只是替代文本输出。我找不到任何直接使用退出代码的东西,但是因为$?检查你可以做的管道中的最后一个命令?
hg summary | grep -q 'commit: (clean)'
将设置$?如果未提交任何更改,则为非零:
$ hg summary | grep -q 'commit: (clean)' ; echo $?
0
$ echo more >> that
$ hg summary | grep -q 'commit: (clean)' ; echo $?
1
答案 1 :(得分:4)
您还可以运行hg id
。如果散列以+
结尾,则表示工作副本已更改。这应该适用于旧版本的hg。
听起来你已经在使用zsh;好吧,几天前我帮助更新了对内置VCS_INFO的Mercurial支持,以便在你的提示中输入VCS信息。计划在下一个版本中支持显示工作目录的更改(以及其他内容)。如果你不想等,你可以grab the necessary files from CVS。
目前我的提示包含此内容(仅使用内置的zsh功能):
(hg)[1801+ branchname somemq.patch, anycurrentbookmarks]
答案 2 :(得分:2)
我用:
hg status -m -a -r -d -u
如果跟踪文件没有变化,则命令输出为空字符串。
答案 3 :(得分:2)
我现在使用这个bash-snippet已经有一段时间了:
if [[ $(hg status 2>/dev/null) ]]
then
# do something
fi
答案 4 :(得分:1)
id
和summary
都比status
慢,所以这是我目前知道的最快的方式,忽略了未跟踪的文件:
[[ -z `hg status | grep -v '^?'` ]] && echo no-changes || echo has-changes
答案 5 :(得分:0)
应该有一些比简单更优雅的东西
[ `hg st |wc -l` -eq 0 ] && echo hi