测试mercurial中未提交的更改

时间:2010-02-05 21:03:37

标签: mercurial

如果mercurial工作树中存在未提交的更改,则检查脚本的最佳方法是什么。

(我在git中使用git diff --quiet的方式)

6 个答案:

答案 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)

idsummary都比status慢,所以这是我目前知道的最快的方式,忽略了未跟踪的文件:

[[ -z `hg status | grep -v '^?'` ]] && echo no-changes || echo has-changes

答案 5 :(得分:0)

应该有一些比简单更优雅的东西

[ `hg st |wc -l` -eq 0 ] && echo hi