Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Testing for uncommitted changes in mercurial

Tags:

mercurial

What's the best way to check in script if there're uncommitted changes in mercurial's working tree.

(the way I would with git diff --quiet in git)

like image 845
Antony Hatchkins Avatar asked Feb 05 '10 21:02

Antony Hatchkins


2 Answers

In mercurial 1.4 and later you can use the summary command, which gives output like this when changes exist:

$ hg summary
parent: 0:ad218537bdef tip
 commited
branch: default
commit: 1 modified
update: (current)

and this post-commit:

$ hg summary
parent: 1:ef93d692f646 tip
 sfsdf
branch: default
commit: (clean)
update: (current)

Alternately, you could install the prompt extension and do something like this:

$ hg prompt '{status}'

which will output a ! or ? or nothing as appropriate.

Both of those, of course, are just alternate text outputs. I couldn't find anything that used the exit code directly, but since $? checks the last command in a pipe you could do?

hg summary | grep -q 'commit: (clean)'

which will set $? non-zero if any changes are uncommitted:

$ hg summary | grep -q 'commit: (clean)' ; echo $?
0
$ echo more >> that 
$ hg summary | grep -q 'commit: (clean)' ; echo $?
1
like image 91
Ry4an Brase Avatar answered Sep 19 '22 01:09

Ry4an Brase


You can also run hg id. If the hash ends with a + it indicates the working copy has changes. This should even work with old versions of hg.

It sounds like you're already using zsh; well, a couple days ago I helped to update the Mercurial support for the built-in VCS_INFO for putting VCS info in your prompt. Slated for the next release is support for showing changes to the working directory (among other things). If you don't want to wait you can grab the necessary files from CVS.

At the moment my prompt includes this (using only built-in zsh functionality):

   (hg)[1801+ branchname somemq.patch, anycurrentbookmarks]
like image 36
whiteinge Avatar answered Sep 23 '22 01:09

whiteinge