Auto-Update Mercurial production repository

Create a branch 'production' which contains all changes that should went onto the production server:

hg branch production && hg commit -m "Added new branch 'production'"

Clone repo to remote:

hg clone . ssh://user@host//path/to/repository

On the server, switch to production branch:

hg update production

Now add the following hook into the .hg/hgrc:

[hooks]
# If current branch is out of date, update and refresh
changegroup = (LANG=C hg summary | grep -q 'update: (current)' || (hg update && mvn clean compile install && systemctl )) >&2

This example uses Maven to rebuild the src into the target directory if any update in the production branch appears.